2016-03-30 56 views
0

我有远程ARM Linux框,我需要调试。远程gdb停止在每个事件

启动服务器:

gdbserver :12345 ./my_app 

客户端:

./arm-am3354-linux-gnueabihf-gdb ~/ 
(gdb) target remote dev_r:12345 
(gdb) continue 

然后我试图暂停使用Ctrl + C的应用程序,但与GDB停止:

[用劣码01退出的[劣等1(过程2766)]

而且在服务器上:

孩子退出,状态1 GDBSERVER退出

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

更新: 调试小程序又名Hello World的作品。本地调试(在x86上)也起作用。该应用程序本身拥有数十万行代码,共享和静态库。

部分解决方案: 可能是我得到的嵌入式平台的系统根本无效。完成复印/ lib中/和/ usr /从目标设备并将其设置为

set sysroot /home/karel/sysroot 

我能够设置断点和应用程序停止他们。但暂停仍然停止远程应用程序。对于QtCreator也是如此:工具 - >选项 - >调试器 - > GDB->其他附加命令

+0

你需要什么设备? http://www.ironlab.io允许在云中的真实设备上进行调试。他们现在处于免费测试阶段。 – Schultz9999

回答

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调试现在再次像魅力一样工作。

注:即使qfbvthandler。cpp已经在Qt5.6及更高版本中更新,我怀疑这种行为仍然是一样的。然而,我没有设置工作区来测试它。