GDB多进程/多线程调试实战例子
在gcc编译的时候,记得附加 -lpthread参数, 否则会出现 undefined reference to ‘pthread_create’ 的错误.
(因为在链接的时候,无法找到phread库中哥函数的入口地址,于是链接会失败。)
例程
1 |
|
输出
[cnwuwil@centos c-lab]$ ./test
ProcessA: 802 step1
ProcessB: 803 step1
ProcessB: 803 step2
ProcessB: 803 step3
ProcessA: 802 thread 3077555904 step2
ProcessA: 802 thread 3077555904 step3
ProcessA: 802 thread 3077553008 step2
ProcessA: 802 thread 3077553008 step3
GDB多进程调试命令
- set follow-fork-mode [parent|child] set detach-on-fork [on|off]
follow-fork-mode | detach-on-fork | 说明 |
---|---|---|
parent | on | 只调试主进程(GDB默认) |
child | on | 只调试子进程 |
parent | off | 同时调试两个进程,GDB跟主进程,子进程block在fork位置 |
child | off | 同时调试两个进程,GDB跟子进程,主进程block在fork位置 |
- 查询正在调试的进程:info inferiors
- 切换调试的进程: inferior +inferior number
- catch fork命令可以捕获进程的创建
- attach + pid , 可以附到一个正在运行的进程上进行调试
. . .