Qt使用gdb调试附加进程

时间:2016-06-28 02:41:24

标签: c qt debugging gdb multiprocess

环境

Qt 5.6.1 Qt Creator 4.0.1 gdb 7.11 Ubuntu 16.04 LTS

方案

C :与 M 进行通信的客户端应用程序。

M :通知 L 启动新流程的经理流程 T

L :Launcher进程,通过自行分配来启动新的 T

T :在后台运行的新流程。

我能够运行测试应用程序并使用gdb调试Qt中的进程 C 。但我无法调试 T

以下是我尝试调试 T 的方式:

C T 中设置断点; 当断点被击中时。我使用Qt菜单选项" Debug" - >"开始调试" - >"附加到正在运行的应用程序"。尝试将调试器附加到 T 进程。 这是我遇到的问题 而不是点击我在 T 中设置的断点。 gdb总是在函数epoll_wait()中遇到一个不可见的断点。之后,如果我继续(F5)。应用程序将继续挂起而不会在 T 中遇到任何进一步的断点。除非我通过使用Qt调试选项强制停止"停止调试器"。应用程序一直在等待。在我停止调试器后, C 仍然在原始断点中断。

Qt中调试器的问题

似乎Qt为不同的进程使用了​​两个不同的调试器。我认为这可能是由 C 挂起引起的。所以 T 进程一直在等待。但我没有在wrap_epoll_wait()函数中设置任何断点我不知道为什么gdb会在那里中断。并在Qt调试器中。我找不到切换回 C 进程的方法让进程继续运行。 (Qt调试器组件"线程"删除列表由于某种原因被禁用,我无法选择不同的线程。)

我尝试过的事情

  1. 修改/etc/sysctl.d/10-ptrace.conf将kernel.yama.ptrace_scope值设置为0
  2. 打开调试器选项"工具 - >选项 - >调试器 - > GDB扩展 - >调试所有子项"在Qt。中打开和关闭。
  3. 以上事项都没有改变调试器在函数wrap_epoll_wait()中断后调试器挂起的事实。

    我的问题

    任何有良好gdb和Qt知识的人都可以帮助我吗?让我知道gdb如何在Qt中调试多个进程?如何在不同的进程之间切换调试器以及为什么gdb在我没有设置断点的某个地方中断?

    非常感谢,

1 个答案:

答案 0 :(得分:0)

由于 T 是通过 L 分叉而创建的。 gdb设置设置后跟模式' 需要设置为Qt创建者中的'

参考: https://sourceware.org/gdb/onlinedocs/gdb/Forks.html