GDB常用命令记录

2018-07-08  本文已影响0人  SetDefault__

1. 编译时允许gdb: 在编译命令中加入-g

gcc/g++ filename.c/cpp -Wall -o a.out -g

2. 启动gdb

gdb

3.调试某文件

file a.out

最常用的10个命令

1) file <文件名>:加载被调试的可执行程序文件。

2) start: 启动程序并在主程序入口处等待。

3) r: run的缩写,从头运行被调试的程序。如果程序中没有断点,执行完整个程序;如果有断点,程序暂停在第一个运行到的断点处。

4) c: continue的缩写,继续执行被调试程序,直至下一个断点或程序结束。

5) b: breakpoint的缩写, 设置断点,断点编号从1开始递增。 用法包括: 

    b <行号>

    b <函数名称>

    b *<函数名称>

    b *<代码地址>

其中在函数名称前面加“*”符号表示将断点设置在“由编译器生成的prolog代码处”。

d: delete breakpoint 的缩写。删除指定编号的某个断点,或删除所有断点。

举个栗子:

b 8 【第八行加入一个断点,编译器会显示加入第一个断点1, e.g. Breakpoint 1 at 0x400581: file a.c, line 8.】

b main【main函数入口加入一个断点,会被自动编号为2】

b foo 【foo函数入口加入新断点,自动编号为3】

d 1【删除第一个breakpoint】

d 【删除全部breakpoints,命令行会有提醒。。。】

6)s: step的缩写, 执行一行源程序代码,如果此行代码中有函数调用,则进入该函数;s 相当于其它调试器中的“Step Into (单步跟踪进入)”。

n: next的缩写,执行一行源程序代码,此行代码中的函数调用也一并执行。n 相当于其它调试器中的“Step Over (单步跟踪)”。

这两个命令必须在有源代码调试信息的情况下才可以使用(GCC编译时使用“-g”参数)。

si, ni

si命令类似于s命令,ni命令类似于n命令。所不同的是,这两个命令(si/ni)所针对的是汇编指令,而s/n针对的是源代码。

7)p <变量名称>:print的缩写,显示指定变量(临时变量或全局变量)的值。

8)l:list的缩写,查看当前位置代码。

9)q:quit的缩写,退出GDB调试环境。

10) layout src显示源码窗口! 比list好用!

Ctrl-x a回到传统模式

----------------------------------------------分割线-----------------------------------------------------------------

GDB Layout命令

命令功能

layout src显示源码窗口

layout asm显示汇编窗口

layout split显示源码 & 汇编窗口

layout regs显示汇编 & 寄存器窗口

layout next下一个layout

layout prev上一个layout

C-x 1单窗口模式

C-x 2双窗口模式

C-x a回到传统模式

GDB 跳转执行命令

命令功能

start开始启动程序,并停在main第一句等待命令

step执行下一行语句, 如语句为函数调用, 进入函数中

next执行下一行语句, 如语句为函数调用, 不进入函数中

finish连续运行到当前函数返回为止

continue从当前位置继续运行程序

return强制令当前函数返回

call func()强制调用函数, 也可以用print func()

run从头开始运行程序

quit退出程序

注: call func() 与 print func() 的区别,在于调用void函数时, call func()没有返回值, 而print有~~

GDB调试输出命令

命令功能

print输出变量值 & 调用函数 & 通过表达式改变变量值

info var查看全局 & 静态变量

info locals查看当前函数局部变量

list查看当前位置代码

backtrace查看各级堆栈的函数调用及参数

set var 变量=xx将变量赋值为xx

注:

p/x 3*i  --  x for hexadecimal, o for octal, d for decimal, f for float, c for char, s for string

断点

命令功能

b N_LINE在第N_LINE行上设置断点

b func在func函数上设置端点

delete breakpoints删除断点

disable breakpoints禁用断点

enable 断点号启动端点

info breakpoints查看断点列表

break foo if x>0设置条件断点

观察点

当待观察点被读 或 被写时,程序停下来,并输出相关信息

命令功能

watch设置写观察点

rwatch设置读观察点

awatch设置读写观察点

info watchpoints查看观察点列表

Display跟踪点

命令功能

display var每次停下来时,显示设置的变量var的值

undisplay取消跟踪显示

info display设置读写观察点

info watchpoints查看跟踪列表

分割线前源自:

https://blog.csdn.net/liigo/article/details/582231

分割线后部分来自:

作者:rh_Jameson

链接:https://www.jianshu.com/p/6cdd79ed7dfb

來源:简书

------------------------------------newly added @20180705------------------------------------------

查看栈信息

bt: backtrace的缩写

上一篇下一篇

猜你喜欢

热点阅读