gdb调试多线程与多进程

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

内容简介: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


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

查看所有标签

猜你喜欢:

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

伏牛传

伏牛传

张天一 / 机械工业出版社 / 2016-5 / 39.00元

编辑推荐: 伏牛堂创始人张天一独家揭秘 社群品牌运营背后的规律和逻辑 90后创业者张天一白手起家,在伏牛堂创立一年之际,已是京城大众点评口碑最佳湖南牛肉粉店、获得四轮数千万投资,他是如何做到的? 餐饮品牌伏牛堂如何建设20万人的青年人生活社群 “霸蛮社”,并快速成为知名品牌? 内容推荐: 《伏牛传:一个社群品牌的内部运营笔记》是一本餐饮社群品牌的内部运营笔记,90后创......一起来看看 《伏牛传》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具