首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >远程GDB调试

远程GDB调试
EN

Stack Overflow用户
提问于 2010-08-18 14:09:30
回答 2查看 16.6K关注 0票数 15

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

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

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

有人能帮我开始吗?

进步!

我发现QTCreator2.0有一个叫做“附加和调试远程应用程序”的特性。它基于gdbserver。好的是它停止在IDE的断点上。然而,有两个问题:

  • 当它击中断点时,它只显示程序集代码,而不是源代码。
  • GDB经常因为“接收到的信号”而退出。

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

更新

我应该提到的是,我切换到通过SSH在远程计算机上运行cgdb

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-19 14:14:14

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

代码语言:javascript
复制
../src/main.cpp
../../src/utils/logger.cpp

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

代码语言:javascript
复制
dir src
dir src/utils
...

现在起作用了。

票数 3
EN

Stack Overflow用户

发布于 2010-08-18 19:40:15

因此,您的主机上的GDB (您开发和编译的机器,所以您有)您必须让它访问“符号文件”。

我通常不使用gdbserver,但是GDB和gdbserver直接用于交叉编译的程序远程调试。您可以尝试确保这对您有效,然后在中找到缺少的选项(或者这将帮助您找到缺少的内容)。

在目标机器上运行:

代码语言:javascript
复制
gdbserver :5000 yourprogram

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

代码语言:javascript
复制
(gdb) symbol-file yourprogram

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

代码语言:javascript
复制
(gdb) target remote target_ip_address:5000

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

我希望这能帮到你!

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3512961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档