GDB调试指令与技巧总结

版权声明:欢迎读者提问交流。 个人水平有限,表述不当或疏漏之处敬请批评指正。 作者:trialley 来源:CSDN 著作权归作者所有。非商业转载请注明出处,商业转载请联系作者获得授权。 https://blog.csdn.net/lgfx21/article/details/89338703

前置知识 gcc命令

-o filename 自定义文件名
-c 只编译不链接,即不产生可执行文件(对gdb调试无影响)
-g 产生gdb调试使用的信息

gcc hello.c -o myhello -c -g

无论是否链接,只要添加-g,gdb就可以调试gcc产生的文件
win平台下gdb无图形界面

基本调试指令

支持tab补全

list(l) 查看源码,每次显示10行
l n 查看[n-5,n+5)行的代码
l -n 当前行向前几行
l r l 列出从r到l行的代码
其他参数
<linenum>   行号。 
<+offset>   当前行号的正偏移量。 
<-offset>   当前行号的负偏移量。 
<filename:linenum>  哪个文件的哪一行。 
<function>  函数名。 
<filename:function> 哪个文件中的哪个函数。 
<*address>  程序运行时的语句在内存中的地址。 

run(r) 开始运行

print n 打印n变量
print &n 打印n的地址
print *n 打印n地址的信息


backtrace 查看调用关系

finish 完成当前函数
until(u) 执行完当前循环 
step(s) 下一步,进入函数
continue(c) 运行到下一个断点
next(n) 下一步,不进入函数
n N 执行N次下一步
return 强制退出当前函数,可以加返回值


breakpoint(b) (break) 
b 行数 在某行设置断点
b 函数名 在某函数设置断点 在我测试的过程中,发现只能在开始调试之后再断函数,运行前断函数则运行不起来
b 断点处 if 条件 当条件满足时触发中断
delete(d) 断点号  删除断点
d 删除所有断点和监视点
clear 行号或函数名 删除对应断点
watch i 表达式 一旦表达式发生变化,就停住


display 变量名 对变量进行监视,没到断点就打印变量值
delete dispaly 删除所有监视项
disable display 关闭监视
enable display 打开监视

info 查看各种信息
info display 查看当前的监视列表
info args  当前函数参数
info locals 当前函数栈上值
info registers 查看寄存器值
info breakpoints 查看断点信息
info frame 
info source  显示源码文件信息

show language 显示当前的编程语言

examine (x) 查看内存
print *a@10 查看a所指向的位置开始往后10个变量
print /x n 以x格式打印n的值
x  按十六进制格式显示变量。 
d  按十进制格式显示变量。 
u  按十六进制格式显示无符号整型。 
o  按八进制格式显示变量。 
t  按二进制格式显示变量。 
a  按十六进制格式显示变量。 
c  按字符格式显示变量。 
f  按浮点数格式显示变量。 

whatis var 显示某变量的类型
ptype var 更详细地显示类型

回车 执行上次执行的命令
quit(q)退出gdb

多线程调试 未完

猜你喜欢

转载自blog.csdn.net/lgfx21/article/details/89338703