0

Environment

Qt 5.6.1 Qt Creator 4.0.1 gdb 7.11 Ubuntu 16.04 LTS

Scenario

C: A client application to communicate with M.

M: A manager process to notify L to launch a new process T.

L: A Launcher process to launch new T by forking itself.

T: A new process running in the background.

I am able to run test application and debug the process C in Qt with gdb. But I am not able to debug the T.

Here is the way I tried to debug the T:

Set breakpoints in both C and T; When the breakpoint is hit. I use Qt menu option "Debug"->"Start Debugging"->"Attach to running application". To try to attach the debugger to the T process. This is the problem I am having Instead of hitting the breakpoints that I set in the T. The gdb always hit an invisible breakpoint in function epoll_wait(). After that, if I continue (F5). The application will keep hanging without hitting any further breakpoints in T. Unless I force stop by using the Qt debug option "Stop Debugger". The application is keep waiting. After I stopped the debugger, the C still breaks in the original breakpoint.

The problem with the debugger in Qt

It seems that Qt uses two different debuggers for different processes. I am thinking it might be caused by the C is hanging. So the T process is keep waiting. But I did not set any breakpoints in wrap_epoll_wait() function I am not sure why gdb breaks there. And in the Qt Debugger. I cannot find a way to switch back to C process to let the process to continue to run. (The Qt debugger component "Threads" drop list is disabled by some reason, I can not select a different thread).

The things I tried

  1. Modified the /etc/sysctl.d/10-ptrace.conf set kernel.yama.ptrace_scope value to 0
  2. Turned the debugger option "Tools->Options->Debugger->GDB Extended->Debug all children" on and off in the Qt.

None of above things changed the fact that the debugger is hanging after the debugger breaks in the function wrap_epoll_wait().

My Question

Anyone at good gdb and Qt knowledge could help me? And let me know how the gdb debug multiple processes works in Qt? How to switch the debugger between different processes and why gdb breaks on somewhere I did not set the breakpoint?

Thank you very much,

Rong

r0n9
  • 2,505
  • 1
  • 29
  • 43
  • Better collect logs with time / process id / thread id for debug. The breakpoint in debugger may help but that is when you know where to put it. – Alexander V Jun 28 '16 at 07:06

1 Answers1

0

Since T created by forking from L. The gdb settings 'set follow-fork-mode' needs to be set to 'child' in Qt creator.

reference: https://sourceware.org/gdb/onlinedocs/gdb/Forks.html

r0n9
  • 2,505
  • 1
  • 29
  • 43