gdb经常使用命令总结
1: 对于在应用程序中增加參数进行调试的方法:
直接用 gdb app -p1 -p2 这样进行调试是不行的。
须要像下面这样使用:
#gdb app
(gdb) r -p1 -p2
或者在执行run命令前使用set args命令:
(gdb) set args p1 p2
能够用show args 命令来查看
2. 增加断点:
break <linenumber>
break <funcName>
break +offset
break -offset
(在当前行号的前面或后面的offset行停住。)
break filename:linenum
在源文件filename的linenum行处停住。
break filename:function
在源文件filename的function函数的入口处停住。
break ... if
...能够是上述的參数。condition表示条件。在条件成立时停住。比方在循环境体中,能够设置 break if i=100,表示当i为100时停住程序。
3. 查看执行时的堆栈:
使用bt命令
4. 打印某个变量的值:
print val
5. 单步: n
继续执行: c
step
单步跟踪,假设有函数调用,他会进入该函数。
next
相同单步跟踪。假设有函数调用,他不会进入该函数。非常像VC等工具中的step over。后面能够加count也能够不加,不加表示一条条地运行,加表示运行后面的count条指令,然后再停住。
set step-mode
set step-mode on
打开step-mode模式,于是,在进行单步跟踪时,程序不会由于没有debug信息而不停住。这个參数有非常利于查看机器码。
set step-mod off
关闭step-mode模式。
finish
执行程序,直到当前函数完毕返回。并打印函数返回时的堆栈地址和返回值及參数值等信息。
until 或 u
当你厌倦了在一个循环体内单步跟踪时,这个命令能够执行程序直到退出循环体。
6.在GDB中运行shell命令:
在gdb环境中,你能够运行UNIX的shell的命令,使用gdb的shell命令来完毕:
eg. shell make
7. 执行环境
可设定程序的执行路径。
show paths 查看程序的执行路径。
set environment varname [=value] 环境变量设置。如:set env USER=hchen
show environment [varname] 查看环境变量。
8.观察点(WatchPoint)
观察点一般来观察某个表达式(变量也是一种表达式)的值是否有变化了,假设有变化。立即停住程 序。
我们有以下的几种方法来设置观察点:
watch
为表达式(变量)expr设置一个观察点。一量表达式值有变化时。立即停住程序。
rwatch
当表达式(变量)expr被读时,停住程序。
awatch
当表达式(变量)的值被读或被写时。停住程序。
info watchpoints
列出当前所设置了的全部观察点。
9. 维护breakpoint
clear
清除全部的已定义的停止点。
clear func
清除全部设置在函数上的停止点。
delete [breakpoints] [range...]
删除指定的断点,breakpoints为断点号。假设不指定断点号,则表示删除全部的断点。range 表示断点号的范围(如:3-7)。其简写命令为d。
比删除更好的一种方法是disable停止点。disable了的停止点,GDB不会删除。当你还须要时。enable就可以,就好像回收站一样。
disable [breakpoints] [range...]
disable所指定的停止点,breakpoints为停止点号。假设什么都不指定。表示disable全部的停止 点。简写命令是dis.
enable [breakpoints] [range...]
enable所指定的停止点。breakpoints为停止点号。
10、程序变量
查看文件里某变量的值:
file::variable
function::variable
能够通过这样的形式指定你所想查看的变量,是哪个文件里的或是哪个函数中的。比如,查看文件f2.c中的全局变量x的值:
gdb) p 'f2.c'::x
查看数组的值
有时候。你须要查看一段连续的内存空间的值。比方数组的一段,或是动态分配的数据的大小。
你能够使用GDB的“@”操作符。“@”的左边是第一个内存的地址的值,“@”的右边则你你想查看内存的长度。比如,你的程序中有这种语句:
int *array = (int *) malloc (len * sizeof (int));
于是。在GDB调试过程中,你能够以例如以下命令显示出这个动态数组的取值:
p *array@len
假设是静态数组的话,能够直接用print数组名。就能够显示数组中全部数据的内容了。
11.输出格式
一般来说,GDB会依据变量的类型输出变量的值。
但你也能够自己定义GDB的输出的格式。比如。你想输出一个整数的十六进制,或是二进制来查看这个整型变量的中的位的情况。要做到这样。你能够使用GDB的数据显示格式:
x 按十六进制格式显示变量。
d 按十进制格式显示变量。
u 按十六进制格式显示无符号整型。
o 按八进制格式显示变量。
t 按二进制格式显示变量。
a 按十六进制格式显示变量。
c 按字符格式显示变量。
f 按浮点数格式显示变量。
(gdb) p i
$21 = 101
(gdb) p/a i
$22 = 0x65
(gdb) p/c i
$23 = 101 'e'
(gdb) p/f i
$24 = 1.41531145e-43
(gdb) p/x i
$25 = 0x65
(gdb) p/t i
$26 = 1100101
11.查看内存
使用examine命令(简写是x)来查看内存地址中的值。
x命令的语法例如以下所看到的:
x/
n、f、u是可选的參数。
n 是一个正整数,表示显示内存的长度,也就是说从当前地址向后显示几个地址的内容。
f 表示显示的格式,參见上面。假设地址所指的是字符串,那么格式能够是s,假设地十是指令地址,那么格式能够是i。
u 表示从当前地址往后请求的字节数。假设不指定的话。GDB默认是4个bytes。u參数能够用以下的字符来取代,b表示单字节。h表示双字节,w表示四字节。g表示八字节。当我们指定了字节长度后,GDB会从指内存定的内存地址開始,读写指定字节,并把其当作一个值取出来。
n/f/u三个參数能够一起使用。比如:
命令:x/3uh 0x54320 表示,从内存地址0x54320读取内容,h表示以双字节为一个单位,3表示三个单位,u表示按十六进制显示。
12.自己主动显示
你能够设置一些自己主动显示的变量。当程序停住时,或是在你单步跟踪时,这些变量会自己主动显示。相关的GDB命令是display。
display
display/
display/ expr
expr是一个表达式。fmt表示显示的格式,addr表示内存地址,当你用display设定好了一个或多个表达式后,仅仅要你的程序被停下来,GDB会自己主动显示你所设置的这些表达式的值。
格式i和s相同被display支持。一个很实用的命令是:
display/i $pc
undisplay
delete display
删除自己主动显示,dnums意为所设置好了的自己主动显式的编号。
disable display
enable display
disable和enalbe不删除自己主动显示的设置,而仅仅是让其失效和恢复。
info display
查看display设置的自己主动显示的信息。
GDB会打出一张表格。向你报告当然调试中设置了多少个自己主动显示设置。当中包含,设置的编号。表达式,是否enable。
13. 设置显示选项
set print address
set print address on
打开地址输出。当程序显示函数信息时,GDB会显出函数的參数地址。系统默觉得打开的,
show print address
查看当前地址显示选项是否打开。
set print array
set print array on
打开数组显示,打开后当数组显示时,每一个元素占一行,假设不打开的话。每一个元素则以逗号分隔。
这个选项默认是关闭的。与之相关的两个命令例如以下。我就不再多说了。
set print array off
show print array
set print elements
这个选项主要是设置数组的,假设你的数组太大了。那么就能够指定一个来指定数据显示的最大长度。当到达这个长度时。GDB就不再往下显示了。假设设置为0,则表示不限制。
show print elements
查看print elements的选项信息。
set print null-stop
假设打开了这个选项。那么当显示字符串时,遇到结束符则停止显示。这个选项默觉得off。
set print pretty on
假设打开printf pretty这个选项。那么当GDB显示结构体时会比較美丽。
14.关于显示源代码list
下面是list命令的說明。
| 参數 | 說明 |
| list filename:number | 列出某檔案的第幾行,檔案是可省略的。 |
| list [function] | 列出某函數的程式碼 |
| list | 繼續印出程式碼 |
| list - | 印出上一次list的程式碼的前一段程式碼(類似向上翻動) |
| show listsize | 顯示現在一次印出幾行 |
| set listsize | 設定一次印出幾行 |
备经常使用命令:
1.常看源代码:list(l)
list <linenumber> 行号
list <+offset> 当前行号的正偏移
list <-offset> 当前行号的负偏移
list <filename:linenumber> 哪个文件的哪一行
list <function> 函数名
list <filename:function> 文件的哪个函数
list <*address> 程序执行时语句在内存中的地址
2.设置断点:break(b)
break <function> 指定函数断点
break <linenumber> 指定行号断点
break <+offset/-offset> 当前行号的正/负偏移
break <filename:linenumber> 哪个文件的哪一行
break <*address> 执行中的内存地址
break 不带參数,下一条指令停止处
break ... if <condition> 在执行中,当condition条件满足时停止。
eg. break if i=100 //当i=100时。马上停止
break foo if i=100 //断点设置在foo中,断点条件是i-100, 一点在函数foo中,i的值等于100,被停止。
3.查看信息:info
info break 查看断点信息
info locals 打印出当前函数中全部局部变量及其值
info stack 查看栈中信息
info frame 更具体的栈层地址信息
info args 查看參数信息
info registers/info all-registers 查看(全部)寄存器信息
info sources 查看项目的源码信息
4.维护breakpoint:disable/enable/clear/delete
disable(dis) 【breakpoints】 【range...】
假设没有參数,则停止全部的断点,
enable 【breakpoints】【range】
clear <function>/<filename:function>/<linenum>/<filename:linenum>
清楚已定义的停止点
delete [breakpoints] [ranga...]
删除指定的断点
5.恢复程序执行:continue(c)
6.until和finish
until 跳出循环比較实用
help finish
Execute until selected stack frame returns.
Upon return, the value returned is printed and put in the value history.
finish 用来跳出函数比較实用。
help until
Execute until the program reaches a source line greater than the current
or a specified location (same args as break command) within the current frame
gdb经常使用命令总结的更多相关文章
- gdb调试常用命令
gdb 调试常用命令 gcc -g mian.c -o main.out -o (定制生成的可执行文件的名称,缺省时为a.out) -g 使gdb可调试,在编译的时候,产生调试信息 gdb main. ...
- gdb之watch命令
[gdb之watch命令] 什么是watchpoint? watchpoint,顾名思义,其一般用来观察某个变量/内存地址的状态(也可以是表达式),如可以监控该变量/内存值是否被程序读/写情况. 在g ...
- gdb之x命令
[gdb之x命令] 可以使用examine命令(简写是x)来查看内存地址中的值.x命令的语法如下所示: x/<n/f/u> <addr> n.f.u是可选的参数. n是一个正整 ...
- Bash,Vim,gdb&git常用命令
Bash 目录 pwd //查看当前目录 mkdir dir1 dir2 //创建目录 tree dir1 mv test1.cpp test2.cpp dir1 dir //移动文件/目录到目 ...
- gdb各种调试命令和技巧
陈皓:用GDB调试程序 GDB概述———— GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或许,各位比较喜欢那种图形界面方式的,像VC.BCB等IDE的调试,但如果你是在UNIX平台 ...
- 再探gdb经常使用命令
前面已经有了一篇对gdb经常使用命令的总结.见 http://blog.csdn.net/u011848617/article/details/12838875 这里对眼下学过的gdb命令进行了 ...
- gdb 使用finish命令(缩写fin)
gdb 使用finish命令(缩写fin) gdb 使用finish命令(缩写fin) gdb 使用finish命令(缩写fin) 跳出跟踪的函数
- GDB查看内存命令(x命令) 用gdb查看指定地址的内存内容
GDB查看内存命令(x命令) - super119 - 博客园 https://www.cnblogs.com/super119/archive/2011/11/18/2254382.html 可以使 ...
- GDB的常用命令
定断点b line.会返回一个断点号(breakpoint-no). 输出p val.可以夹杂类型装换.解引用. 遇到断点自动执行命令commands breakpoint-no. 停止执行s. 退出 ...
随机推荐
- java Date 和 javascript Date
近期写一个页面.上面要展示下日期. 在Java中生成了Date.然后将这个Date通过velocity送入vm模板其中 代码例如以下: var dates = new Date("$!{pp ...
- Automatic logon configuration on Linux OS
Automatic logon configuration on Linux OS 1. Regarding to DSA: a) ssh-keygen -t dsa b) cat ~/.ssh/i ...
- 实例:怎样使用 Netty 下载文件
本实例主要參考的是官网的examples:点击这里 使用场景:client向Netty请求一个文件,Netty服务端下载指定位置文件到client. 本实例使用的是Http协议,当然,能够通过简单的改 ...
- ThinkPHP框架配置自定义的模板变量(十)
原文:ThinkPHP框架配置自定义的模板变量(十) 模板替换(手册有详细介绍对应的目录) __PUBLIC__:会被替换成当前网站的公共目录 通常是 /Public/ __ROOT__: 会替换成当 ...
- android中设置TextView/Button 走马灯效果
在Android的ApiDemo中,有Button的走马灯效果,但是换作是TextView,还是有一点差异. 定义走马灯(Marquee),主要在Project/res/layout/main.xml ...
- 图像特征提取方法:Bag-of-words
Bag-of-words简单介绍 最初的Bag-of-words ,也叫做"词袋",在信息检索中,Bag-of-words model假定对于一个文本,忽略其词序和语法,句法,将其 ...
- Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)(转)
互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,Dubbo是一个分布式服务框架,在这种情况下诞生的.现在核心业务抽取出来,作为独立的服务,使 ...
- 你不知道的JavaScript上卷笔记
你不知道的JavaScript上卷笔记 前言 You don't know JavaScript是github上一个系列文章 初看到这一标题的时候,感觉怎么老外也搞标题党,用这种冲突性比较强的题目 ...
- 10324 - Zeros and Ones
Problem N Zeros and Ones Input: standard input Output: standard output Time Limit: 2 seconds Memory ...
- Struts2 学习第一步准备工作
第一步:安装下载MyEclispe10 对于MyEclispe的下载安装就不再详述了. 第二步:下载Struts-2.3.15 Struts-2.3.15下载地址: http://struts.apa ...