`

gdb 调试工具

阅读更多

gdb 调试工具

 

gdb 概述

gdb , GNU Debugger ,用于在 linux 上 调试 c/c++ 程序,

 

参考:

ububtu gdb 指南

 

------

程序的编译

 

用 gcc 编译时,应加上 -g 参数,以让编译出的文件支持 gdb 调试,

 

格式:

gcc -g source_file

 

------

进入 gdb 

 

gdb file 进入 gdb 程序,对 file 进行调试,

 

------

gdb 下的 命令

 

* 程序显示

l , list

显示程序,继续向后显示,

l i , list i

显示 i 行 周围的程序,包括 上下各几行,

l 1

从第1行 开始显示程序,

l - fun_name

显示 函数的程序,

l -

向前显示程序,

l +

向后显示程序,同 l

show listsize

显示1次默认显示几行

set listsize i

设置默认显示 i 行,

 

* 断点

b i , break i

设置 i 行为断点

b fun_name , break fun_name

设置 函数 的入口为断点,

info b,info break

列出断点,第1列为断点编号

d i , delete i

删除 编号为 i 的 断点,

 

* 程序 调试 运行

r , run

运行程序

n , next

单步执行

c , continue

运行,直到下一个断点,或程序结束

s , step

单步进入,如果有函数调用,则进入该函数,

finish

跳出当前函数,返回上级函数,如果当前就是最外层函数则无效,

 

 

* 查看变量

p var_name

显示 变量值

p *array_name@len

显示 数组的值,len 等于数组的长度,可以指定其他值,如 len-1,2,

因为 *array_name 取得了 数组的首地址,数组内存是连续的,因此指定一个长度后,就可以取出连续的值,

例子:

p *arr@len 打印整个数组

p *arr@len-1 打印数组,不包含最后1个值,

p *arr@2 打印数组的前2个元素

info locals

列出 当前函数中,所有局部变量的值

info args

列出 当前函数中,所有参数的值

info catch

列出 当前函数中,异常处理信息

x , examine

显示 指定内存地址中的值

 

* 自动显示

display var_name

设置自动显示的 变量 或 内存地址的值,当程序停住时这些值就被自动显示,

display

显示 被自动显示的 列表,其中第1列时编号

undisplay i

根据编号取消 自动显示

 

* 观察点

watch exp

添加 观察点 - 值写入,当表达式 exp 的值写入时,停止程序,

rwatch exp

添加 观察点 - 值读取,当表达式 exp 的值被读取时,停止程序,

awatch exp

添加 观察点 - 读写,当表达式 exp 的值被 读 或 写 时,停止程序,

info watchpoints

显示所有的 观察点,其中第1列是编号,

delete watchpoint i

删除指定编号的 观察点,

 

* 函数堆栈

bt , backtrace

显示函数的调用堆栈,

f i, frame i

显示第 i 层栈的信息,i=0 表示栈顶,

up , up i 

显示向上 1 或 i 层 栈的信息,

down , down i 

显示向下 1 或 i 层 栈的信息,

info f,info frame

显示当先栈中更多的信息,

 

* 程序跳转

u , until

跳出循环体,

jump i

强制 跳转到第 i 行执行

return

强制 结束当前函数

call fun_name

强制 调用函数

 

* 退出 gdb

q

退出 gdb

 

* 历史命令

回车

重复 上次的命令

 

* 搜索

search xxx

搜索

 

* 寄存器

info registers

查看寄存器

 

 

* 其他

show language

显示当前程序的 语言

 

 

------


分享到:
评论
1 楼 huanhuan519 2012-09-18  
感谢分享~

相关推荐

Global site tag (gtag.js) - Google Analytics