远程GDB调试

时间:2010-08-18 14:09:30

标签: c++ c gdb

我花了一整天的时间试图找到一种方法来从Qt Creator或Eclipse启用GDB调试。我了解到基本上有两种启动目标应用程序的方法:

  • 使用ssh(ssh host gdb
  • 使用gdbserver

我能够使用这两种方法远程启动gdb并启动应用程序。但是,GDB永远不会响应IDE中设置的任何断点。此外,我无法暂停应用程序以检查程序状态。在Qt Creator中,我只得到一个模糊的堆栈跟踪(我可能一直在查看ssh或gdb的痕迹......)。

任何人都可以帮助我开始吗?

进度!

我发现使用Qt Creator 2.0有一个名为“附加和调试远程应用程序”的功能。它基于gdbserver。好处是它在IDE的断点处停止。但是,有两个问题:

  • 当它遇到断点时,它只显示汇编代码,而不是源代码。
  • 由于'收到信号',GDB经常退出

我应该提一下,远程可执行文件是使用旧版本的GCC编译的,而不是安装在我本地PC上的版本。也许有些问题与此有关。

更新

我应该提一下,我已经通过SSH切换到远程计算机上运行cgdb

基于Qt Creator的远程解决方案不稳定。由于神秘的“收到信号”消息,GDB倾向于退出。

2 个答案:

答案 0 :(得分:7)

所以你主机上的GDB(你开发和编译的机器,所以你有Qt Creator的地方)你必须让它访问“符号文件”。

我通常不使用Qt Creator,而是直接用GDB和gdbserver进行交叉编译程序的远程调试。您可以尝试一下,确保这对您有用,然后可能在Qt Creator中找到缺少的选项(或者这可能会帮助您找到遗漏的内容)。

在目标机器上运行:

gdbserver :5000 yourprogram

在主机上运行gdb,然后加载符号文件:

(gdb) symbol-file yourprogram

在主机上的GDB上,您必须连接以将GDB连接到远程gdbserver:

(gdb) target remote target_ip_address:5000

从那时起,您可以在控制目标程序的主机上使用GDB。

我希望这有帮助!

答案 1 :(得分:3)

由于makefile构建系统的特殊性,调试符号中包含的文件引用如下所示:

../src/main.cpp
../../src/utils/logger.cpp

GDB没有问题,但是Qt Creator无法将这些路径映射到实际文件。我能够通过在GDB init文件中添加'dir'语句来解决这个问题:

dir src
dir src/utils
...

现在可行。