gdb调试多进程多线程程序
Posted Luella_G
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gdb调试多进程多线程程序相关的知识,希望对你有一定的参考价值。
1.gdb的使用
(1)Linux环境下对于代码的调试都是使用gdb进行调试,使用的时候在源代码生成的时候加上-g选项。
(2)开始使用:gdb binFile(binFile为源文件名)
退出:ctrl+d或quit
(3)常用命令
2.多进程/多线程代码
(1)编写多进程/多线程代码
(2)编写Makefile
3.gdb一些说明
(1)show follow-fork-mode
通过show follow-fork-mode命令查看当前模式:
gdb是默认执行父进程的。
(2)set follow-fork-mode[child|parent]、set detach-on-fork[on|off]
通过set follow-fork-mode[child|parent]、set detach-on-fork[on|off]修改gdb调试模式:
parent
child
parent
child
(3)info inferiors
查询正在调试的进程
(4)inferior <infer number>
切换调试的进程
4.调试
(1)调试主进程,block子进程。
(gdb) show detach-on-fork
Whether gdb will detach the child of a fork is off.
(gdb) catch fork
Catchpoint 1 (fork)
(gdb) r
[Thread debugging using libthread_db enabled]
Catchpoint 1 (forked process 3475), 0x00110424 in __kernel_vsyscall ()
Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.47.el6.i686
(gdb) break test.c:14
Breakpoint 2 at 0x8048546: file test.c, line 14.
(gdb) cont
[New process 3475]
[Thread debugging using libthread_db enabled]
Breakpoint 2, main (argc=1, argv=0xbffff364) at test.c:14
Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.47.el6.i686
(gdb) info inferiors
* 1
(2) 切换到子进程:
(gdb) inferior 2
[Switching to inferior 2 [process 3475] ( /home/superficial/code/gdb调试)]
[Switching to thread 2 (Thread 0xb7fe86c0 (LWP 3475))]
#0
(gdb) info inferiors
* 2
(gdb) inferior 1
[Switching to inferior 1 [process 3472] ( /home/superficial/code/gdb调试)]
[Switching to thread 1 (Thread 0xb7fe86c0 (LWP 3472))]
#0
(gdb) info inferiors
* 1
以上是关于gdb调试多进程多线程程序的主要内容,如果未能解决你的问题,请参考以下文章