gdb 和 cgdb 调试工具

时间:2024-03-29 08:46:42

gdb 和 cgdb 调试工具

1、gdb 和 cgdb 的区别

相同点:都是调试器,命令基本都通用
gdb:就是一个调试器,启动调试:gdb + 可执行文件
cgdb:是gdb的一个扩展,打开后自动显示源码TUI,方便阅读源码
	  gdb虽然也可以,但是会经常花屏,需要自己手动刷新界面	
	  缺点:使用print命令的时,无法显示中文字符,可能是乱码或不显示
gdb打开图形界面:开始调试后按ctrl + x +a
			   gdb -tui + 可执行文件

2、常用的命令

(1)程序运行顺序:

run命令:开始调试
	简写命令 r
continue命令:在断点处继续调试,或者按了ctrl c 后继续调试
	简写命令 c
next命令:运行到下一行(但是不进入调用的函数) 		简写 n
step命令:进入被调用的函数内部						简写 s
util命令:util+ fileline  快速执行到文件某一行		简写 u
jump命令:jump + fileline 跳过中间的代码直接到fileline这一行

finish命令:运行完当前被调用的函数
return 命令:在当前行直接return回去

(2)断点堆栈类命令:

break命令:打断点,例如  break  file:line   |  break 函数名
	简写命令 b
backtrace命令:打印堆栈信息
	简写命令 bt
frame命令:frame + 堆栈编号(通过bt知道的编号)
	作用:跳转到堆栈编号处
	简写命令 f
info break命令:查看断点信息
	简写命令 i b
enable命令、disable命令、delete命令:打开、关闭、删除断点
	通过 i b 命令得到断点编号,这三条命令后接断点编号
delete 删除全部断点:$ delete 		#这样既可

(3)显示代码或数据类命令

list命令:可以连续按,有 l -  和  l + 两种显示源码顺序
	简写命令 l
print命令:打印某个对象的数据,注意指针
	简写 p
ptype命令:打印数据类型
watch 命令:观察某一个变量,一旦改变就会打印出来(注意指针)
display 命令:监视变量或内存,每次中断自动打印相应的数据
info args命令:打印参数信息
help info命令:可以看到其他查找info的命令
显示string类型的数据 :(char*)p				# p为string类型的指针
set print pretty on							#使得结构体数据显示友好一点

(4)线程类命令:

info thread命令:打印线程信息命令
thread + 线程编号 命令:切换线程编号

(5)不常用但重要的命令

disassemble 命令:反汇编(默认AT&T 格式的指令)
		set disassembly-flavor intel(设置为intel汇编格式)
set args 和 show args 命令:设置参数、显示参数
tbreak 命令:临时断点,只会运行一次后自动删除

(6)特殊操作

print命令:不仅可以打印数据,还能改变数据
	p testInt = 512			#这样就能够改变数据,插入到程序中运行
list命令:可以显示别的文件的信息
	list filename:fileline

5、attach 正在运行的进程

ps 得到我们所需要的进程pid
gdb attach pid 开始调试
detach 结束调试

还可以调试core文件,即调试崩溃的程序,这个还没有遇到过,以后再补充

6、多进程调试待补充