GDB常用调试命令以及多进程多线程调试
http://blog.csdn.net/freeelinux/article/details/53700266
一:普通命令
1.list命令
- list linenum 显示程序第linenum行周围的程序
- list function 显示函数名为function的函数的源程序
- list 显示当前行后面的源程序
- list - 显示当前行前面的源程序
2.run(r)
- run args run命令可以直接接命令行参数值,也可以在执行run之前通过 set args + 参数值实现。
3.break(b)
- b linenum 在某行打断点
- b +offset/-offset 在当前行号的前面或后面offset停住
- b filename:linenum 在某文件的某行打断点
- b filename:function 在某文件某个函数入口停住
- b *address 在程序的运行地址处停住
- b 没有参数在下一句停住
- b where if condition 当某个条件满足时,在某一行停住(这个很有用,比如b 10 if ret == 5)
4.单步命令
- step count 一次性执行count步,如果有函数会进入函数
- next count 一次执行count,不进入函数
- finish 运行程序,直到当前函数完成返回,并打印函数返回时的堆栈地址和返回值以及参数信息
- until 退出循环体(尤其是针对for循环这种,很烦的)
5.continue命令
6.print(p)命令
- x 按十六进制格式显示变量
- d 按十进制格式显示变量
- u 按十六进制格式显示无符号整型
- o 按八进制格式显示变量
- t 按二进制格式显示变量t 按二进制格式显示变量
- a 按十六进制格式显示变量
- c 按字符格式显示变量
- f 按浮点数格式显示变量
7.watch命令
- watch expr 为表达式expr设置一个观察点,一旦表达式值有变化,马上停住程序
- rwatch expr 当表达式expr被读时,停住程序
- awatch expr 当表达式的值被读或被写时,停住程序。
- info watchpoints 列出所有观察点(info指令通常可以去套)
8.examine命令
9.jump命令
- jump linespec 指定下一条语句的运行点,linespec可以是linenum,filename+linenum,+offset这几种形式
- jump address 跳到代码行的地址
10.signal命令
11.set命令
- set args 设置命令行参数
- set env environmentVarname=value 设置环境变量。如:set env USER=benben
12.call命令
- call function 强制调用某函数
13.disassemble命令
二:多进程调试
1.单独调试子进程
- attach child-pid 使用该命令后,直接run即可,和调试普通程序就没区别了
- dettach 脱离进程
2.使用调试器选项follow-fork-mode
- set follow-fork-mode mode 其中mode的可选值是parent和child,分别表示调试父进程和子进程。
- info inferiors 查询正在调试的进程
- inferior processnum 切换进程
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]
三:多线程调试
- #Enable the async interface
- set target-async 1
- #If using the CLI, pagination breaks non-stop
- set pagination off
- #Finall, turn it on
- set non-stop on
- info threads 显示所有线程
- thread id 切换到指定线程
- break filename:linenum thread all 在所有线程相应行设置断点,注意如果主线程不会执行到该行,并且启动all-stop模式,主线程执行n或s会切换过去
- set scheduler-locking off|on\step 默认off,执行s或c其它线程也同步执行。on,只有当前相称执行。step,只有当前线程执行
- show scheduler-locking 显示当前模式
- thread apply all command 每个线程执行同意命令,如bt。或者thread apply 1 3 bt,即线程1,3执行bt。
四:core文件
- ulimit -c unlimited 生成core文件,也可以是指定大小,然后使用gdb ./main core启动,bt查看调用栈即可。
GDB常用调试命令以及多进程多线程调试的更多相关文章
- gdbserver 移植与多线程调试
在嵌入式linux平台使用gdb调试进行远程调试需要安装gdbserver,gdbserver工作在目标板上,通过串口或者网线与主机上的gdb互联实现远程调试. Gdbserver需要根据不同的嵌入式 ...
- 第07课:GDB 常用命令详解(下)
本课的核心内容: disassemble 命令 set args 和 show args 命令 tbreak 命令 watch 命令 display 命令 disassemble 命令 当进行一些高级 ...
- gdb常用命令及使用gdb调试多进程多线程程序
一.常用普通调试命令 1.简单介绍GDB 介绍: gdb是Linux环境下的代码调试⼯具.使⽤:需要在源代码⽣成的时候加上 -g 选项.开始使⽤: gdb binFile退出: ctrl + d 或 ...
- gdb常用命令及gdb调试多进程/线程程序&coredump
一.常用普通调试命令 1.简单介绍GDB 介绍: gdb是Linux环境下的代码调试⼯具.使⽤:需要在源代码⽣成的时候加上 -g 选项.开始使⽤: gdb binFile退出: ctrl + d 或 ...
- gdb常用调试命令以及多线程堆栈的查看
GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或许,各位比较喜欢那种图形界面方式的,像VC.BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC ...
- gdb调试多进程多线程程序
一.调试的指令 1.list命令 list linenum 显示程序第linenum行的周围的程序 list function 显示程序名为function的函数的源程序 list 显示当前行后面的源 ...
- gdb常用的调试命令
首先将源代码编译.链接生成debug版本的可执行文件,然后通过‘gdb debug版本的可执行文件名’进入调试模式. a) 单进程.单线程基础调试命令 l 显示main函数所在的文件的源代码 ...
- C 调试 gdb常用命令
gdb常用命令: [root@redhat home]#gdb 调试文件:启动gdb (gdb) l :(字母l)从第一行开始列出源码 (gdb) break n :在第n行处设置断点 (gdb) b ...
- 多进程多线程GDB调试 (转)
多进程多线程GDB调试 一.线程调试指南: 1. gdb attach pid 挂载到调试进程 2. gdb$ set scheduler-locking on 只执行当前选定线程的 ...
随机推荐
- WPF手动绑定事件
this.but1.AddHandler(Button.ClickEvent,new RoutedEventHandler(OkButton_Click));
- Java Arrays.sort源代码解析
前提: 当用到scala的sortWith,发现: def sortWith(lt: (A, A) ⇒ Boolean): List[A] // A为列表元素类型 根据指定比较函数lt进行排序,且排序 ...
- Linux ext3/ext4数据恢复
2012年12月9日 测试环境: Ubuntu 12.04 X86 +ext4 恢复文件使用的工具:extundelete(点击下载) 说明:当文件异常消失或者rm误删除后,避免在该分区中继 ...
- 【SqlServer】SqlServer的常规操作
创建一张新表,不负责任何数据(该表不会有原来表的主键.索引等等) select * into NewTable from OldTable where 1<>1; 创建一张新表,并且复制旧 ...
- Adobe Photoshop for Mac(图像处理软件)破解版安装
1.软件简介 Adobe Photoshop(简称 "PS")是 macOS 系统上一款由 Adobe Systems 开发和发行的图像处理软件.Photoshop 主要处理 ...
- C# 使用NLog记录日志入门操作
环境:win7 64位, VS2010 1.首先用VS2010创建命令行工程NLogDemo 2.在程序包管理器控制台中输入:Install-Package NLog -Version 4.4.12 ...
- 永久关闭selinux
selinux这东西,有时候真让人搞不懂. 临时关闭: setenforce 0 getenforce #查看状态是否是disabled 永久关闭: vim /etc/sysconfig/selinu ...
- Android 使用开源库StickyGridHeaders来实现带sections和headers的GridView显示本地图片效果
大家好!过完年回来到现在差不多一个月没写文章了,一是觉得不知道写哪些方面的文章,没有好的题材来写,二是因为自己的一些私事给耽误了,所以过完年的第一篇文章到现在才发表出来,2014年我还是会继续在CSD ...
- 一道简单的HashMap面试题所想到的...
前言 看到一个JDK1.7和JDK1.8中关于HashMap的一个面试题: JDK1.7和1.8中HashMap中链表的插入的方式有什么不同? 原以为自己对HashMap的源码理解的还算可以了,应该足 ...
- pattern-matching as an expression without a prior match -scala
https://www.scala-lang.org/files/archive/spec/2.11/08-pattern-matching.html https://docs.scala-lang. ...