cgdb调试总结
目录
1.cgdb安装
# 安装不一定最新版本cgdb
sudo apt-get install cgdb
# 安装最新版本cgdb
## 依赖安装
sudo apt install automake
sudo apt install flex
sudo apt install texinfo
sudo apt install libncurses-dev
sudo apt install libreadline-dev
## 编译安装cgdb
git clone https://github.com/cgdb/cgdb.git
cd cgdb
./autogen.sh
./configure --prefix=/usr/local
make
sudo make install
2.常用操作指令
1. 操作快捷键
ESC
按键切到cgdb
窗口,i
按键切换到gdb
窗口。s
按键鼠标滚轮可以在cgdb
窗口中滚动。+/-
按键缩放cgdb
窗口。spacebar
按键在cgdb
窗口中代码打断点。Ctrl+w
调整cgdb
窗口位置。F5
send a run command to GDBF6
send a continue command to GDBF7
send a finish command to GDBF8
send a next command to GDBF10
send a step command to GDB
2. 基本操作指令
# 文件进入调试
cgdb 可执行文件/core文件
# gdb窗口
r //run code
b 行号 //添加/设置断点
info breakpoints //显示所有断点信息Num Type Disp Enb Address What
# 单步执行(***程序运行到断点后执行)
c continue
s step
n next
u 行号 //快速执行到文件某一行util+ fileline
jump 行号 //直接跳中间代码到某一行
finish
return
delete //删除所有断点
enable //打开断点
disable //关闭断点
# 查看变量
print 变量名
whatis 变量名
3. 程序运行顺序
run命令:开始调试
简写命令 r
continue命令:在断点处继续调试,或者按了ctrl c 后继续调试
简写命令 c
next命令:运行到下一行(但是不进入调用的函数) 简写 n
step命令:进入被调用的函数内部 简写 s
util命令:util+ fileline 快速执行到文件某一行 简写 u
jump命令:jump + fileline 跳过中间的代码直接到fileline这一行
finish命令:运行完当前被调用的函数
return 命令:在当前行直接return回去
4. 断点及堆栈类指令
break命令:打断点,例如 break file:line | break 函数名
简写命令 b
backtrace命令:打印堆栈信息
简写命令 bt
frame命令:frame + 堆栈编号(通过bt知道的编号)
作用:跳转到堆栈编号处
简写命令 f
info break命令:查看断点信息
简写命令 i b
enable命令、disable命令、delete命令:打开、关闭、删除断点
通过 i b 命令得到断点编号,这三条命令后接断点编号
delete 删除全部断点:$ delete #这样既可
5. 代码显示及数据类指令
list命令:可以连续按,有 l - 和 l + 两种显示源码顺序
简写命令 l
print命令:打印某个对象的数据,注意指针
简写 p
ptype命令:打印数据类型
watch 命令:观察某一个变量,一旦改变就会打印出来(注意指针)
display 命令:监视变量或内存,每次中断自动打印相应的数据
info args命令:打印参数信息
help info命令:可以看到其他查找info的命令
显示string类型的数据 :(char*)p # p为string类型的指针
set print pretty on #使得结构体数据显示友好一点
6. 线程类命令
info thread命令:打印线程信息命令
thread + 线程编号 命令:切换线程编号
7. 重要指令
disassemble 命令:反汇编(默认AT&T 格式的指令)
set disassembly-flavor intel(设置为intel汇编格式)
set args 和 show args 命令:设置参数、显示参数
tbreak 命令:临时断点,只会运行一次后自动删除
8. 特殊操作
print命令:不仅可以打印数据,还能改变数据
p testInt = 512 #这样就能够改变数据,插入到程序中运行
list命令:可以显示别的文件的信息
list filename:fileline
9. 多进程
ps 得到我们所需要的进程pid
gdb attach pid 开始调试
detach 结束调试
info inferiors $查看进程