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