如何在 GDB 中使用跟踪

Posted

技术标签:

【中文标题】如何在 GDB 中使用跟踪【英文标题】:How to use tracing in GDB 【发布时间】:2011-11-02 16:50:03 【问题描述】:

在documentation for gdb:

tracepoint 工具目前仅可用于远程 目标。请参阅指定调试目标部分。此外,您的 远程目标必须知道如何收集跟踪数据。这个功能 在远程存根中实现;但是,没有任何存根 在撰写本文时已与 GDB 支持跟踪点一起分发

强调我的。我在哪里可以获得这样的存根(对于在 Debian x86 或 x64 上使用 GCC 编译的 C/C++ 代码)?或者我该怎么做?关于编写存根的文档仅提到实现与串行端口通信的功能。谢谢!

【问题讨论】:

你可能应该在 linux 上使用 gdb 时参考 FSF gdb 文档,(事实证明,这个特定部分没有改变)因为苹果 gdb 是“很久很久以前”分叉的。跨度> 是的,我收到了 gdb 不支持它的警告,然后去谷歌搜索,这就是结果,但它绝对适用于当前的 gdb 【参考方案1】:

我对遥控器了解不多,但 gdb 中的一些目标现在确实支持跟踪点 可能有一种方法可以使用“普通”gdb info 或 show 命令来解决此问题,但我找不到它。由于'supported=1',在下面的输出中支持跟踪点, 这可能不仅限于 gdb 存根,还包括运行存根的内核。

$ gdbserver/gdbserver :12345 ~/tests/test &
$ gdb -quiet
(gdb) file ~/tests/test
Reading symbols from /home/ratmice/tests/test...done.
(gdb) target remote :12345
Remote debugging using :12345
Remote debugging from host 127.0.0.1
Reading symbols from /lib64/ld-linux-x86-64.so.2...(no debugging symbols found)...done.
Loaded symbols for /lib64/ld-linux-x86-64.so.2
0x00000035dd600b20 in _start () from /lib64/ld-linux-x86-64.so.2
Created trace state variable $trace_timestamp for target's variable 1.
Missing separate debuginfos, use: debuginfo-install glibc-2.13-2.x86_64
(gdb) interpreter-exec mi2 -trace-status
^done,supported="1",running="0",frames="0",frames-created="0",buffer-size="5242880",buffer-free="5242880",disconnected="0",circular="0"

【讨论】:

这是哪个版本?我在内核 2.6.32-5 上有 gdb 7.0.1-debian 和 gcc 版本 4.4.5。 tstart 给了我Target does not support this command 按照你的例子运行gdbserverinterpreter-exec mi2 -trace-status 给了我^error,msg="Undefined MI command: trace-status"。谢谢!

以上是关于如何在 GDB 中使用跟踪的主要内容,如果未能解决你的问题,请参考以下文章

使用 gdb 跟踪程序

跟踪所有变量以执行gdb中的函数

从核心转储中获取堆栈跟踪

如何在 C++ 中跟踪无效指针?

堆栈跟踪中没有函数名称,GDB,但出现在LLDB中[重复]

GDB简单使用