gdb调试多线程与多进程

栏目: C · 发布时间: 6年前

内容简介:gdb调试多线程与多进程

先看一下比较经典的gdb博客:

用GDB调试程序(一)

用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

gdb调试多线程与多进程

查询正在调试的进程: 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实现。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


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

.NET设计规范

.NET设计规范

克瓦林纳 / 葛子昴 / 人民邮电出版社 / 2006-7 / 49.00元

本书为框架设计师和广大开发人员设计高质量的软件提供了权威的指南。书中介绍了在设计框架时的最佳实践,提供了自顶向下的规范,其中所描述的规范普遍适用于规模不同、可重用程度不同的框架和软件。这些规范历经.net框架三个版本的长期开发,凝聚了数千名开发人员的经验和智慧。微软的各开发组正在使用这些规范开发下一代影响世界的软件产品。. 本书适用于框架设计师以及相关的专业技术人员,也适用于高等院校相关专业......一起来看看 《.NET设计规范》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

随机密码生成器
随机密码生成器

多种字符组合密码