gpt4 book ai didi

c - 帮助 gdb 跟踪(或类似的)

转载 作者:太空狗 更新时间:2023-10-29 17:20:21 25 4
gpt4 key购买 nike

我有一个应用程序。我有源代码(在 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 将被优化掉。

关于c - 帮助 gdb 跟踪(或类似的),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1330306/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com