我花了一整天的时间试图找到一种方法来从Qt Creator或Eclipse启用GDB调试。我了解到基本上有两种启动目标应用程序的方法:
ssh host gdb
)我能够使用这两种方法远程启动gdb并启动应用程序。但是,GDB永远不会响应IDE中设置的任何断点。此外,我无法暂停应用程序以检查程序状态。在Qt Creator中,我只得到一个模糊的堆栈跟踪(我可能一直在查看ssh或gdb的痕迹......)。
任何人都可以帮助我开始吗?
我发现使用Qt Creator 2.0有一个名为“附加和调试远程应用程序”的功能。它基于gdbserver。好处是它在IDE的断点处停止。但是,有两个问题:
我应该提一下,远程可执行文件是使用旧版本的GCC编译的,而不是安装在我本地PC上的版本。也许有些问题与此有关。
我应该提一下,我已经通过SSH切换到远程计算机上运行cgdb。
基于Qt Creator的远程解决方案不稳定。由于神秘的“收到信号”消息,GDB倾向于退出。
答案 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
...
现在可行。