使用GDB调试多进程程序
在学习Nginx源码的过程中
碰到一个问题
使用GDB调试Nginx的时候
每次在Nginx主程序启动master之后
主进程就被deattache了.然后整个GDB退出
这样我们就没法看到最主要的事情的经过了.
因为主要的进程管理,事件处理等等事情,
都是发生在fork出来的master以及再后面的worker进程中的
好在IBM developer works上一直有绝好的文章
这篇使用 GDB 调试多进程程序就是专门讲述GDB调试多进程程序的三个方法的
1.使用follow-fork-mode和set detach-on-fork连用来自动跳入fork后的进程中
这个方法在新版本的内核中都可以使用.
在gdb中使用者两个指令
set follow-fork-mode [parent|child]
parent: fork之后继续调试父进程,子进程不受影响。
child: fork之后调试子进程,父进程不受影响。
set detach-on-fork [on|off]
on: 断开调试follow-fork-mode指定的进程。
off: gdb将控制父进程和子进程。follow-fork-mode指定的进程将被调试,另一个进程置于暂停(suspended)状态。
一般是进gdb之后
set follow-fork-mode child
set detach-on-fork off
这样就可以满足调试子进程的要求了
2.先在环境中使用ps以及pstree确定需要调试子进程的pid
然后在gdb中使用attach [pid]来进入需要调试的子进程
这个方法需要解决进入子进程的时候无法确定运行到什么程度的问题
需要修改子进程的源码,在开始设置个标志位或者标志文件,
gdb调试之后修改此标志位让子进程执行起来
3.在主程序调用子程序的地方替换成sh,sh里面用gdb去调用子进程的可执行程序
这个方法超麻烦,需要xwindow,而且只能在用exec启用子进程的程序使用
所以此方法虽然可行,但是制约太多.不推荐.
建议继续学习:
- 调试工具之GDB (阅读:13571)
- Linux内存点滴 用户进程内存空间 (阅读:11364)
- gdb的基本工作原理是什么? (阅读:10505)
- Oracle MTS模式下 进程地址与会话信息 (阅读:9990)
- 深入理解Nginx之调试优化技巧 (阅读:6747)
- Linux上进程的表示以及入门 (阅读:6341)
- Linux下进程绑定多CPU运行 (阅读:5745)
- GDB中应该知道的几个调试方法 (阅读:5443)
- 分析进程内存分配情况,解决程序性能问题 (阅读:5327)
- Linux下如何知道文件被那个进程写 (阅读:4958)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:Johnny Woo 来源: 架构研究室
- 标签: GDB 进程
- 发布时间:2010-01-08 12:09:23
- [67] 如何拿下简短的域名
- [65] Go Reflect 性能
- [62] Oracle MTS模式下 进程地址与会话信
- [60] IOS安全–浅谈关于IOS加固的几种方法
- [58] 图书馆的世界纪录
- [57] android 开发入门
- [56] 【社会化设计】自我(self)部分――欢迎区
- [50] 视觉调整-设计师 vs. 逻辑
- [50] 界面设计速成
- [46] 读书笔记-壹百度:百度十年千倍的29条法则