我需要调试远程ARM Linux盒子。
服务器已启动:
gdbserver :12345 ./my_app
客户:
./arm-am3354-linux-gnueabihf-gdb ~/
(gdb) target remote dev_r:12345
(gdb) continue
然后我尝试使用Ctrl + C暂停应用,但gdb会停止:
[Inferior 1(流程2766)退出,代码为01]
在服务器上:
已退出状态为1的子项 GDBserver退出
故事: 我试图在QtCreator中使用远程调试,但是在运行时设置断点时,gdb以同样的方式崩溃。此外,断点和暂停在QtCreator中不起作用。 我还尝试了另一个gdb,比如gdb-multiarch和android-sdk中的那个。
更新: 调试小程序又名Hello World的工作原理。本地调试(在x86上)也可以。该应用程序本身有十万行代码,共享和静态库。
部分解决方案: 我所获得的嵌入式平台的sysroot可能无效。从目标设备复制/ lib /和/ usr /并将其设置为
之后set sysroot /home/karel/sysroot
我可以设置断点,应用程序会停止。然而,暂停仍然停止远程应用程序。 QtCreator也是如此:工具 - >选项 - >调试器 - > GDB->其他附加命令
答案 0 :(得分:0)
我在调试运行在EGLFS平台上的应用程序时遇到了类似的问题(甚至完全相同的问题)。使用Qt 5.4构建时的调试工作非常正常,使用Qt 5.5进行调试的确如您所描述的那样。
经过几个小时的搜索,我发现我的Qt 5.5上的应用程序在接收到SIGINT时退出,而在Qt 5.4上,调试器可以按预期暂停应用程序。由于GDB在尝试暂停应用程序或设置/删除断点时发送SIGINT,因此这就是故障开始的地方。
经过一番研究,我终于找到了以下对Qt 5.5的提交:Fix up signal handling in QFbVtHandler。在最后,您会看到在接收SIGINT或SIGTERM时,调用handleInt()
处理程序,最终遇到_exit(1)
。设置断点确认这正是尝试暂停或使用GDB设置断点时发生的情况。
对我有用的解决方案:我已经为qfbvthandler.cpp创建了一个补丁,只需删除#define VTH_ENABLED
行。
GDB调试现在又像魅力一样。
注意:尽管qtbvthandler.cpp已在Qt5.6及更高版本中更新,但我怀疑行为仍然是相同的。但是,我没有设置工作区来测试它。