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