帮助gdb跟踪(或类似)

帮助gdb跟踪(或类似),第1张

概述我有一个申请.我有源代码(在C中).无论如何我都可以编译它.添加我想要的任何工具.等等.但是,我不想用一堆printf来源代码.我希望能够生成某种类型的日志,该日志显示何时写入特定值(例如全局结构的某个成员)(其值更改).我希望能够显示源文件和行号,以及旧值和新值. 我还希望能够按名称而不是地址指定值.但地址还可以.如果我可以指定一个函数的本地值,则可以获得奖励积分. 我仍在试图找出gdb的跟踪命 我有一个申请.我有源代码(在C中).无论如何我都可以编译它.添加我想要的任何工具.等等.但是,我不想用一堆printf来源代码.我希望能够生成某种类型的日志,该日志显示何时写入特定值(例如全局结构的某个成员)(其值更改).我希望能够显示源文件和行号,以及旧值和新值.

我还希望能够按名称而不是地址指定值.但地址还可以.如果我可以指定一个函数的本地值,则可以获得奖励积分.

我仍在试图找出gdb的跟踪命令.任何帮助是极大的赞赏.谢谢.

解决方法 首先,您需要确保使用调试符号编译程序,并且可能没有优化以使gdb最有用.对于 gcc,那就是-g -O0.

其次,您正在寻找的功能不是追踪,它的观察点.

(gdb) help watchSet a watchpoint for an Expression.A watchpoint stops execution of your program whenever the value ofan Expression changes.

所以,给出一些示例代码:

int main() {    int a;    a = 1;    a = 2;    return 0;}

然后你可以在上面运行gdb,并且:

(gdb) b mainBreakpoint 1 at 0x80483a5: file test.c,line 4.(gdb) runStarting program: /tmp/test Breakpoint 1,main () at test.c:44               a = 1;(gdb) watch aHarDWare watchpoint 2: a(gdb) cContinuing.HarDWare watchpoint 2: aold value = -1207552288New value = 2main () at test.c:88               return 0;

由于存在堆栈而不是内存,它的工作有点滑稽.如果进行了优化,那么它的工作量会更少:a会被优化掉.

总结

以上是内存溢出为你收集整理的帮助gdb跟踪(或类似)全部内容,希望文章能够帮你解决帮助gdb跟踪(或类似)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1255911.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-07
下一篇2022-06-07

发表评论

登录后才能评论

评论列表(0条)

    保存