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

标签 linux debugging gdb real-time

我有一个与某些设备(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/

相关文章:

c - Linux 上的退出函数

linux - 有什么不同?须藤重启

linux - Spring Boot 应用程序即服务 + VM 选项

c# - 在 Visual Studio 2015 中调试 native 应用程序加载的托管 DLL

c - 如何使用 gdb 调试加载了 LD_PRELOAD 的动态库中的函数?

linux - 如何删除多行IPTABLES

linux - lib32-ncurses 没有安装到 rootfs

c++ - 调用 bazel 命令进行调试时 GDB 立即退出

python - gdb 运行时错误 : pretty-printer already registered: libstdc++-v6

c - 为什么 GDB "thread apply all where"没有将所有输出发送到文件(只有一些......)?