【发布时间】:2015-11-14 17:48:35
【问题描述】:
我有一个与某些设备(OS Linux)交换数据的进程。我想附加到这个过程(而不是停止它),并实时观察某些变量的值和其他信息。是否有可能用 GDB 或其他东西来做,如果是的话怎么做?到目前为止,我为此目的使用 printfs。
【问题讨论】:
标签: linux debugging gdb real-time
我有一个与某些设备(OS Linux)交换数据的进程。我想附加到这个过程(而不是停止它),并实时观察某些变量的值和其他信息。是否有可能用 GDB 或其他东西来做,如果是的话怎么做?到目前为止,我为此目的使用 printfs。
【问题讨论】:
标签: linux debugging gdb real-time
gdb 有两个工具可以帮助解决这个调试场景。
一个是相对较新的dprintf 命令。这基本上类似于printf 调试——除了您可以在 gdb 会话期间选择要打印的内容,并且不需要重新编译。
dprintf 并不总是非常“实时”。默认情况下,它涉及停止您的下级,以便 gdb 可以提取信息并打印它。您可能想要set dprintf-style agent,尽管我认为这意味着使用远程代理,并且并非所有代理都支持此功能。
另一个工具是 gdb “tracepoint”功能。跟踪点最初旨在支持这种情况 - 记录来自无法停止的实时服务器的数据。
跟踪点也只能与合适的远程代理一起使用。不过,您可以只使用gdbserver——这很容易做到,而且在本地也可以正常工作。
gdb 手册中有大量关于跟踪点的文档,我建议您阅读这些文档以了解如何使用它们。
【讨论】: