记录 | gdb调试的基本命令

r (run)

运行程序

b (breakpoint)

打断点,比如 b func(打到函数)

b 5(打到第5行)(当前文件)

b main.cpp:5(main.cpp的第5行)

b MyClass::func() (打到类的成员函数func()、在类内可以 p this 打印、p *this、p this->name)

tb (temporary breakpoint)

临时断点,用法同 b

c (continue)

继续执行代码,直到下一个断点

n (next)

执行下一行代码,但是不会进入函数内部

s (step)

执行下一行代码,并进入函数内部 (单步调试)

如果陷入步进后,可以按c跳出继续执行代码

p (print)

打印变量的值

bt (backtrace)

打印函数调用栈

f (finish)

执行到当前函数返回为止

d (delete)

删除断点,d 删除指定断点

d 删除所有断点

cl (clear)

同delete,也是删除断点,cl 删除指定断点

cl 删除所有断点

watch

监视一个变量或者一段内存

比如监视 n => watch n

条件监视 => watch n if n >= 2

awatch

监视写

rwatch

监视读

g 或 k

退出调试器

tui enable

吊炸天的图形界面调试

layout src

同为吊炸天的图形界面调试

layout asm

显示为汇编语言

u (until)

快速运行完当前的循环体,并运行至循环体外停止

i b

查看断点信息,相当于 info breakpoints

一些小技巧


  • gdb的带参调试:先正常进入gdb调试模式:gdb build/main,然后 run 的时候带参进入,如 r -l -a -o a.txt 等。

这样第二次 run 的时候会带同样的参数


  • 启动 gdb 调试的时候,使用命令 gdb "build main" -ex 'b main',这样启动后会自动跳转到main函数

记录 | gdb调试的基本命令_第1张图片

  • 同理,也可以通过刚才的 -ex 命令指定多个命令

调试配置的保存
  • 进入gdb调试模式后,比如设置了一些断点后,想要把这些配置保存下来 (这里主要指断点的设置),则

save breakpoints codingai.gdb,然后下次再进入调试时加载 source codingai.gdb,这样就重新把调试配置加载进来了


要在两个不同的终端调试

先启一个 main,然后到另一个终端

查找进程pid

ps -A | grep main

# 或

pidof main
# 比如 312312

则继续,在另一个终端中

sudo gdb

# 加载符号
attach 312312

接下来可以正常调试,且两个终端之间是不影响的

你可能感兴趣的:(踩坑记录,gdb,linux,gdb技巧)