gpt4 book ai didi

c++ - 远程 gdb 在每个事件中停止

转载 作者:太空宇宙 更新时间:2023-11-04 12:53:57 25 4
gpt4 key购买 nike

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

服务器启动:

gdbserver :12345 ./my_app

客户端:

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

然后我尝试使用 Ctrl+C 暂停应用程序,但 gdb 停止:

[Inferior 1 (process 2766) exited with code 01]

在服务器上:

Child exited with status 1 GDBserver exiting

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

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

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

set sysroot /home/karel/sysroot

我可以设置断点,应用程序会在断点处停止。然而,暂停仍在停止远程应用程序。 QtCreator 也一样:Tools->Options->Debugger->GDB->Additional Attach Commands

最佳答案

我在调试在 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 及更高版本中更新,我怀疑行为仍然相同。但是,我没有设置工作区来对此进行测试。

关于c++ - 远程 gdb 在每个事件中停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36311032/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com