使用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 (阅读:14314)
- Oracle MTS模式下 进程地址与会话信息 (阅读:13573)
- Linux内存点滴 用户进程内存空间 (阅读:12554)
- gdb的基本工作原理是什么? (阅读:11167)
- 深入理解Nginx之调试优化技巧 (阅读:7700)
- Linux上进程的表示以及入门 (阅读:7265)
- 使用gdb调试运行时的程序小技巧 (阅读:6717)
- Linux下进程绑定多CPU运行 (阅读:6695)
- 分析进程内存分配情况,解决程序性能问题 (阅读:6259)
- GDB中应该知道的几个调试方法 (阅读:6112)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:Johnny Woo 来源: 架构研究室
- 标签: GDB 进程
- 发布时间:2010-01-08 12:09:23
-
[927] WordPress插件开发 -- 在插件使用 -
[133] 解决 nginx 反向代理网页首尾出现神秘字 -
[52] 如何保证一个程序在单台服务器上只有唯一实例( -
[52] 整理了一份招PHP高级工程师的面试题 -
[50] 全站换域名时利用nginx和javascri -
[50] 海量小文件存储 -
[50] 用 Jquery 模拟 select -
[49] CloudSMS:免费匿名的云短信 -
[48] Innodb分表太多或者表分区太多,会导致内 -
[47] jQuery性能优化指南
