远程GDB调试

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

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

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

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

进展!

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

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

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

更新

我应该提一下,我通过SSH切换到远程机器上运行cgdb 。

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

所以你主机上的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。

我希望这有帮助!

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

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

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

 dir src dir src/utils ... 

现在它有效。