加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

帮助gdb跟踪(或类似)

发布时间:2020-12-16 03:27:44 所属栏目:百科 来源:网络整理
导读:我有一个申请.我有源代码(在C中).无论如何我都可以编译它.添加我想要的任何工具.等等.但是,我不想用一堆printf来源代码.我希望能够生成某种类型的日志,该日志显示何时写入特定值(例如全局结构的某个成员)(其值更改).我希望能够显示源文件和行号,以及旧值和新
我有一个申请.我有源代码(在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会被优化掉.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读