远程gdb在每次事件时都会停止
Remote gdb stops at every event
我有一个需要调试的远程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]
在服务器上:
子项退出,状态为1GDB服务器退出
故事:我试图在QtCreator中使用远程调试,但在运行时设置断点时,gdb也以同样的方式崩溃。此外,断点和暂停在QtCreator中也不起作用。我也在尝试另一个类似gdb-multiarch的gdb和来自android sdk的gdb。
更新:调试小程序,又名Hello World工作。本地调试(在x86上)也可以。该应用程序本身有十万行代码、共享库和静态库。
部分解决方案:可能我得到的嵌入式平台的sysroot是无效的。从目标设备复制/lib/和/usr/并将其设置为之后
set sysroot /home/karel/sysroot
我可以设置断点,应用程序会在断点处停止。然而,暂停仍然会停止远程应用程序。QtCreator也是如此:工具->选项->调试器->GDB->附加附加命令
我在调试在EGLFS平台上运行的应用程序时遇到了类似(甚至完全相同?)的问题。使用Qt 5.4构建时的调试工作非常好,使用Qt 5.5进行的调试确实如您所描述的那样。
经过数小时的搜索,我发现我在Qt 5.5上的应用程序在收到SIGINT时退出,而在Qt 5.4上,调试器可以按预期暂停应用程序。由于GDB在尝试暂停应用程序或设置/删除断点时发送SIGINT,因此这就是问题的根源。
经过更多的研究,我终于找到了以下对Qt 5.5的承诺:修复QFbVtHandler中的信号处理。最后,您可以看到,当接收到SIGINT或SIGTERM时,会调用handleInt()
处理程序,在那里我们最终运行到_exit(1)
。在那里设置断点证实了这正是在尝试暂停或使用GDB设置断点时发生的情况。
适用于我的解决方案:我创建了qfbvthandler.cpp的补丁,只需删除#define VTH_ENABLED
行。
GDB调试现在又像魅力一样发挥作用了。
注意:尽管qfbvthandler.cpp在Qt5.6及更高版本中进行了更新,但我怀疑其行为仍然相同。然而,我没有设置一个工作区来测试这一点。
- Android NDK传感器向事件队列报告奇怪的间隔
- 当在带有Eigen的C++中使用GDB时,我如何才能看到更多的大矩阵
- 如何找出GDB的SIGTRAP核心转储的根本原因
- 从文本文件中读取时钟时间和事件时间并进行处理
- WMI检测进程创建事件-c++
- EvtExportLogneneneba API正在将远程计算机的事件日志保存到远程PC本身.如何将其保存到主机
- 如何使用gdb制作一个可以漂亮地打印每个对象的C++函数
- 处理闪烁窗口事件
- C++Builder中的OnClick事件签名存在问题
- 跟踪滚动条上的鼠标事件
- 什么是事件表 (wxWidgets)?
- 如何在 MFCaptureEngine 中获取"Camera removed"事件
- 给定顺序中的事件处理
- gdb错误:Backtrace已停止:上一帧与此帧相同(堆栈已损坏?)
- 使用vscode调试时,GDB意外退出
- 当服务中的事件被触发时,如何将响应从服务发送回客户端?
- 在 C++/CLI 中将 .NET 事件从一个 DLL 引发到另一个 DLL
- 如何创建事件驱动的 SDL2 应用程序
- Windows 进程间同步类似事件?
- 远程gdb在每次事件时都会停止