(请保留-> 作者: 罗冰 https://blog.csdn.net/luobing4365)
在开发过程中,时不时的要用到gdb调试程序。由于平常的开发,使用gdb的场合相对较少,gdb的命令 总是忘记。让自己处于一种“学了忘、忘了学”的循环中,每次都得去找以前的笔记,甚是痛苦。
因此,准备 花点时间,把gdb调试的使用,在博客中记录下来,方便自己随时查阅。这篇博客会不定期的更新,只要涉及到gdb的使用,全部都会扔到这里。
1基本的命令
相比于windbg,个人觉得gdb更为优雅简单。作为早期用惯了debug,然后又习惯了各种IDE调试工具(比如Visual Studio、MDK Keil等)的程序猿,使用gdb有种莫名的亲切感。
gdb的基本命令有:
表1 gdb基本命令
命令 | 描述 |
---|---|
break | 设置断点 |
run | 0x00 |
start | 单步执行,停在第一条执行语句 |
help | 显示帮助文件 |
list | 查看源代码 |
set | 设置变量的值 |
step | 单步调试,按语句,跳入函数内部执行 |
next | 单步调试,按过程,不跳入函数内部 执行 |
backtrace | 查看函数 的条用栈帧和层级关系,简写bt |
frame | 切换函数的栈帧 |
info | 查看函数内部局部变量的数值 |
finish | 结束当前 函数,返回到函数调用点 |
continue | 继续运行,简写c |
打印值及地址,简写p | |
quit | 退出gdb |
2 常用的命令记录
2.1 设置断点
设置断点可以使用break命令,一般操作如下:
(gdb) break 70 //在第70行设置断点
(gdb) info break //查看断点
Num Type Disp Enb Address What
2 breakpoint keep y 0x0000000000403475 in main
at ../hidtest/test.c:70
breakpoint already hit 1 time
(gdb)
2.2 查看变量
常需要查看的,一般是局部变量和结构体。如下:
(gdb) info local //查看局部变量
结构体的查看,比较关心其成员变量的值,命令如下:
(gdb) p cur_dev //结构体变量
$1 = (struct hid_device_info *) 0x7ffff7a1dff8
(gdb) p cur_dev->vendor_id //成员变量查看
$2 = 28271
命令print可以使用格式控制,比如“/x”、“/c”、“/f”等。
(未完待续)