概 述
服务端程序不可避免的会使用gdb来调试程序,有关gdb调试的基础内容,可以参考Linux gdb调试。本文介绍使用gdb调试多进程程序和多线程程序
gdb 调试多进程程序
1. 单独调试子进程
单独调试子进程比较简单,通过目标子进程的PID,attach到gdb调试器上。
2. 使用调试器选项
gdb提供follow-fork-mode选项,在程序执行到fork系统调用时,允许我们选择继续调试父进程还是子进程,用法如下:
(gdb) set follow-fork-mode mode
mode可选值如下:
-
parent:表示调试父进程 -
child:表示调试子进程
gdb 调试多线程程序
gdb提供了一组命令用于辅助多线程程序的调试,这里列举常用的:
info threads
用于显示可调式的所有线程。gdb会为每个线程分配一个ID,我们可以使用这个ID来操作对应的线程。ID前带有 * 号的线程是当前被调试的线程。
thread ID
用于调试目标ID指定的线程。
set scheduler-locking [ off|on|step ]
用于设置其他线程的执行情况,可选值如下:
-
off:表示不锁定任何线程,即所有线程都继续执行。默认值 -
on:表示只有当前被调试的线程会继续执行 -
step:表示在单步执行时,只有当前被调试的线程会执行