GDB 基本使用

基本使用


断点

1.设置断点

b fuction_name

设在函数上


b file:line

设在文件的某一行


b Dlinklist<int>::show

在某个模板类的方法上设置断点


b Dlinklist::show

在普通类的方法上设置断点


b func if var==value

or

b func

condition 1  var==value

设置条件断点。 这两个执行的结果一样。

断点位置在func,但只有在变量var为value时才停下。


2. 查看断点

info break


3. 删除断点

delete 3

删除3号断点


4. 使能/屏蔽断点

enable 3

disable 3


5. 设置断点触发时执行的命令

commands 3

设置在断点3触发时的命令

比如 print 某个变量


6. pendiing 断点

在调试动态库的时候,如果一开始就设置一个断点在动态库的函数上,那么gdb会报错。

这时需要使用

set breakpoint pending on

 

具体解释可以运行, help set breakpoint pending来查看


watch point

设置

watch var

当var变化就停下来,我很少用


watch var==value

当表达式var==value的值变化时,就会停下来


执行控制

1. 开始

run


run arg list

将arg list作为程序的参数


2. 继续

continue


3. 下一【n】条,不进入函数

next [n]


4. 下一【n】条,进入函数

step [n]


5. 设置程序运行的参数

set args list


6. 显示程序运行的参数列表

show args


7. 跳出当前函数,跳出栈帧

finish


8. 运行直到某行

until

默认是运行到大于现在执行代码的地方。比如说可以跳出循环。


until file:line

一直运行到文件的某行。只能适用于当前栈帧。


查看源代码

显示源代码

list

显示后面10行


list -

显示前面10行


list file:10

显示文件file,10~20行


list function

显示函数


list file:function

显示某文件中的某个函数


list *ADDR

显示该地址对应的代码


搜索源代码

search text

正向搜索


reverse-search

反向搜索


stack frame

backtrace

显示backtrace


frame [n]

堆栈回到某一个函数

这样就可以用info locals显示函数的内部变量。


down/up

上下移动栈帧


查看变量

显示内容

print var


以十六进制显示

print /x  var


显示数组

print  array[0]@size

size是数组的长度,或者希望显示的长度


显示某个函数中的变量

print func::var


按照某类型显示某地址中的内容

print {int}0xbffff25c


查看内存

x/nfu

n 表示显示的单元个数

f  表示显示的格式

u  表示单元的长度


自动显示

display i

每次都会显示i的值


查看寄存器

info registers


查看local变量

info locals


显示数据类型

whatis var

显示变量var的类型


ptype var

说是比whatis更详细


设置变量

set variable index = 5


执行函数

call function(parameter)


运行shell

shell

进入shell执行界面

Ctrl-D 返回gdb提示符


信号

信号接受

handle SIGKILL action


信号发送

signal SIGKILL


编译

坑爹的gdb尽然还能直接进行编译。。。

make


日志

可以将gdb命令输出记录到文件上。

set logging on filename

有时候记录一下错误信息,backtrace什么的。



你可能感兴趣的:(GDB 基本使用)