环境
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调试器组件"线程"删除列表由于某种原因被禁用,我无法选择不同的线程。)
我尝试过的事情
以上事项都没有改变调试器在函数wrap_epoll_wait()中断后调试器挂起的事实。
我的问题
任何有良好gdb和Qt知识的人都可以帮助我吗?让我知道gdb如何在Qt中调试多个进程?如何在不同的进程之间切换调试器以及为什么gdb在我没有设置断点的某个地方中断?
非常感谢,
融
答案 0 :(得分:0)
由于 T 是通过 L 分叉而创建的。 gdb设置设置后跟模式' 需要设置为Qt创建者中的' 。