GDB调试-多进程与多线程程序
来源:互联网 发布:linux 多进程通信 编辑:程序博客网 时间:2024/05/17 00:59
先看一下比较经典的gdb博客:
用GDB调试程序(一)
用GDB调试程序(二)
一、gdb常用命令
二、GDB与多进程
默认设置下,在调试多进程程序时GDB只会调用主进程,但是GDB(>V7.0)支持多进程的分别与同步调试。即GDB支持同时调试多个进程。只需要设置follow-fork-mode(默认为 parent)和detach-on-fork(默认为:on)即可。
follow-fork-mode detach-on-fork 说明
parent on 只调试主进程(GDB默认)
child on 只调试子进程
parent off 同时调试两个进程,gdb跟主进程,子进程block(阻塞)在fork位置
child off 同时调试两个进程,gdb跟子进程,主进程block在fork位置
设置方法: set follow-fork-mode[parent|child] set detach-on-fork[on|off]
显示:show follow-fork-mode show detach-on-fork
查询正在调试的进程:info inferiors
显示GDB调试的所有inferior,GDB为他们分配ID。其中带*的进程是正在调试的进程。
(GDB将每一个被调试程序的执行状态记录在一个名为inferior的结构中。一般情况下一个inferior对应一个进程,每一个inferior都有自己的地址空间。inferior有时候会在进程没有启动时就存在)
切换调试的进程:inferior <inferior number>
通过该指令可以切换到ID为number的inferior进行调试。
调加新的调试进程:add-inferior[-copies n][-exec executable]
可以用file+executable来分配给inferior可执行文件。+增加n个inferior并执行程序为executable。如果不指定n只增加一个inferior。如果不指定executable,则执行程序留空,增加后可使用file命令重新指定执行程序。这时候创建的inferior其关联的进程并没启动。
删除一个infnum 的inferior:remove-inferiors infnum (如果inferior正在运行,则不能删除,删除之间需先kill或detach掉该inferior)
detach掉infnum的inferior:detach inferior infnum注意(inferior仍然存在,可以用run等命令执行)
kill 掉infnum的inferior:kill inferior infnum 注意(inferior仍然存在,可以用run等命令执行)
三、GDB与多线程
在多线程编程时,当我们需要调试时,有时需要控制某些线程停在断点,有些线程继续执行。有时需要控制线程的运行顺序。有时需要中断某个线程,切换到其他线程。这些都可以通过gdb实现。GDB默认支持调试多线程,跟主线程,子线程block在create+thread。
先来看一下gdb调试多线程常用命令:
info+threads:显示可以调试的所有线程。gdb会为每个线程分配一个ID(和tid不同),编号一般从1开始。后面的ID是指这个ID。
thread+ID:切换当前调试的线程为指定ID的线程。
四、设置core
core的意思是核心,dumped的意思就是抛出,转储,core dumped就是核心转储的意思。当一个进程异常退出前,该进程会抛出当时该程序进程的内存详细情况存储在硬盘上,文件名通常是core,这就叫core dump。
进程异常终止通常是因为代码存在BUG,比如非法内存访问导致段错误,事后可以用调试器检查core文件以查清错误原因,这叫做事后调试.
uname -a 查看机器参数
ulimit -a 查看默认参数
ulimit -c 1024 设置core文件大小为1024
ulimit -c unlimit 设置core文件大小为无限
eg1(可以快速定位出问题的位置)
gdb a.out core.xxx
where
eg2 (在 gdb 中使用)
(gdb) core-file core.xxx
- GDB调试-多进程与多线程程序
- Linux下用gdb调试多进程与多线程程序
- Linux下使用gdb调试多进程与多线程程序
- 使用gdb调试多进程与多线程程序
- gdb调试多进程和多线程程序
- gdb调试多线程多进程程序
- 使用gdb调试多进程多线程程序
- 使用gdb调试多进程多线程程序
- 使用gdb调试多进程多线程程序
- 使用gdb调试多进程多线程程序
- 使用GDB调试多进程/多线程程序
- gdb调试多进程多线程程序
- 使用gdb调试多进程多线程程序
- gdb调试多进程多线程程序
- gdb调试多线程多进程程序
- GDB调试多进程多线程程序
- 使用gdb调试多进程、多线程程序
- 使用gdb调试多线程多进程程序
- 百思不得姐高仿
- 第一百二十一天 : varnish
- SpringMVC 注解(待补充)
- Unity3d中UI开发的MVC模式
- JavaSwing_1.8: SpringLayout(弹性布局)
- GDB调试-多进程与多线程程序
- PHP生成二维码
- JavaSwing_1.9: null(绝对布局)
- C++复合类型
- 贪心背包-南阳OJ-106
- spring概述
- Poedu_Windows_封装file类
- Angular2优质学习资源收集
- 80 忽略语法细节,从整体上理解函数