如何在 Linux 上调试实时应用程序?

How to debug real time application on Linux?

我有一个与某些设备交换数据的进程(OS Linux)。我想附加到这个过程(而不是停止它),并实时观察某些变量的值和其他信息。是否可以用 GDB 或其他东西来做,如果可以,该怎么做?到目前为止,我正在为此目的使用 printfs。

gdb 有两个工具可以帮助解决这个调试问题。

一个是相对较新的 dprintf 命令。这基本上类似于 printf 调试 -- 除了您可以在 gdb 会话期间选择要打印的内容,并且您不需要重新编译。

dprintf 并不总是 "realtime"。默认情况下,它涉及停止你的下级,以便 gdb 可以提取信息并打印它。您可能需要 set dprintf-style agent,尽管我认为这意味着使用远程代理,但并非所有代理都支持此功能。

另一个工具是 gdb "tracepoint" 特性。 Tracepoints 最初设计用于支持这种情况——从无法停止的实时服务器记录数据。

Tracepoints 也只适用于合适的远程代理。不过,您可以只使用 gdbserver,这很容易做到,并且在本地工作得很好。

gdb 手册中有大量关于跟踪点的文档,我建议阅读该手册以了解如何使用它们。