我有一个申请.我有源代码(在C中).无论如何我都可以编译它.添加我想要的任何工具.等等.但是,我不想用一堆printf来源代码.我希望能够生成某种类型的日志,该日志显示何时写入特定值(例如全局结构的某个成员)(其值更改).我希望能够显示源文件和行号,以及旧值和新值.
我还希望能够按名称而不是地址指定值.但地址还可以.如果我可以指定一个函数的本地值,则可以获得奖励积分.
我仍在试图找出gdb的跟踪命令.任何帮助是极大的赞赏.谢谢.
解决方法
首先,您需要确保使用调试符号编译程序,并且可能没有优化以使gdb最有用.对于
gcc,那就是-g -O0.
其次,您正在寻找的功能不是追踪,它的观察点.
(gdb) help watch Set a watchpoint for an expression. A watchpoint stops execution of your program whenever the value of an expression changes.
所以,给出一些示例代码:
int main() { int a; a = 1; a = 2; return 0; }
然后你可以在上面运行gdb,并且:
(gdb) b main Breakpoint 1 at 0x80483a5: file test.c,line 4. (gdb) run Starting program: /tmp/test Breakpoint 1,main () at test.c:4 4 a = 1; (gdb) watch a Hardware watchpoint 2: a (gdb) c Continuing. Hardware watchpoint 2: a Old value = -1207552288 New value = 2 main () at test.c:8 8 return 0;
由于存在堆栈而不是内存,它的工作有点滑稽.如果进行了优化,那么它的工作量会更少:a会被优化掉.