C++ 远程gdb在每个事件中都会停止

C++ 远程gdb在每个事件中都会停止,c++,linux,gdb,gdbserver,C++,Linux,Gdb,Gdbserver,我有一个需要调试的远程ARM Linux机器 服务器已启动: gdbserver :12345 ./my_app 客户: ./arm-am3354-linux-gnueabihf-gdb ~/ (gdb) target remote dev_r:12345 (gdb) continue 然后,我尝试使用Ctrl+C暂停应用程序,但gdb会使用以下命令停止: [下级1(流程2766)退出,代码为01] 和在服务器上: 子项已退出,状态为1 GDBserver正在退出 故事: 我试图在QtC

我有一个需要调试的远程ARM Linux机器

服务器已启动:

gdbserver :12345 ./my_app
客户:

./arm-am3354-linux-gnueabihf-gdb ~/
 (gdb) target remote dev_r:12345
 (gdb) continue
然后,我尝试使用Ctrl+C暂停应用程序,但gdb会使用以下命令停止:

[下级1(流程2766)退出,代码为01]

和在服务器上:

子项已退出,状态为1 GDBserver正在退出

故事: 我试图在QtCreator中使用远程调试,但在运行时设置断点时,gdb也以同样的方式崩溃。此外,断点和暂停在QtCreator中不起作用。 我还尝试了另一种gdb,比如gdb multiarch和来自android sdk的gdb

更新: 调试小程序又名helloworld。本地调试(在x86上)也可以工作。该应用程序本身有数十万行代码、共享库和静态库

部分解决方案: 可能我得到的嵌入式平台的sysroot是无效的。从目标设备复制/lib/和/usr/并将其设置为

set sysroot /home/karel/sysroot
我可以设置断点,应用程序会在断点处停止。但是,暂停仍在停止远程应用程序。QtCreator也是一样:工具->选项->调试器->GDB->附加附加命令

我在调试运行在EGLFS平台上的应用程序时遇到了类似(甚至完全相同?)的问题。使用Qt5.4构建的调试工作非常好,使用Qt5.5进行的调试确实如您所述

经过数小时的搜索,我发现我在Qt5.5上的应用程序在收到SIGINT时退出,而在Qt5.4上,调试器可以按预期暂停应用程序。由于GDB在尝试暂停应用程序或设置/删除断点时发送SIGINT,所以问题就从这里开始

经过进一步的研究,我最终发现Qt5.5有以下承诺:。最后,您会看到,当接收到SIGINT或SIGTERM时,会调用
handleInt()
处理程序,我们最终会在那里遇到
\u exit(1)
。在那里设置断点确认了这正是尝试暂停或使用GDB设置断点时发生的情况

对我有效的解决方案:我创建了qfbvthandler.cpp的补丁,只需删除
#define VTH_ENABLED

GDB调试现在又像一个魔咒一样工作了

注意:尽管qfbvthandler.cpp已在Qt5.6及更高版本中更新,但我怀疑其行为仍将相同。但是,我没有设置工作区来测试这一点。

您需要什么设备?允许在云中的真实设备上进行调试。他们现在是免费测试版。