编译
hello.c
#include <stdio.h>
void main(int argc, char *argv[]){
if(argc > 1){
printf("First argv: %s\n",argv[1]);
}else{
printf("No argv!\n"
;
}
}
编译
gcc -g hello.c -o hello.o
进入调试
gdb hello.o
帮助命令
help [命令]
启动程序
run [命令行参数]
GDB支持命令的缩略形式,还支持TAB键快速补齐
也可以使用start命令启动程序,会自动执行到main函数
start [命令行参数]
设置断点
可以指定函数、指定行数设置断点
break [file:]function
Set a breakpoint at function (in file).
查看所有断点
info break
删除断点(通过指定源代码行数),若指定函数名,则删除该函数所有断点
clear 源代码行数/函数名
删除断点(通过指定断点编号),若不指定编号,则删除所有断点
delete [断点编号]
禁用断点
disable 断点编号
启动断点
enable 断点编号
单步执行
step
相当于其他调式程序中的step into/步进
遇到子函数时会进入子函数继续单步执行
next
相当于其他调试程序中的step over/跨越
遇到子函数时会当作一个整体,直接返回子函数的执行结果
finish
相当于其他调试程序中的step out/步出
直接执行完当前函数,返回到上层函数调用处
查看变量
print 变量名/表达式
支持以不同的形式进行输出
display 变量名/表达式
使用display
命令设置变量名/表达式后,每次程序暂停都会自动打印该变量/表达式的值
可以使用info display
查看所有设置的变量/表达式
可以使用undisplay 编号
删除设置的变量/表达式
查看变量的内存地址
print &变量
监控变量
watch 变量名/表达式
设置完待监控的变量后
执行continue(c)
命令后,程序会一直运行到该变量值发生改变
可视化页面
ctrl+x a
按住ctrl+x,然后松开ctrl,然后a
或者ctrl+x 1
同时打开反汇编窗口
ctrl+x 2
按住ctrl+x,然后松开ctrl,然后1
执行Python代码
通过python
命令进入shell,通过end
命令退出shell
也可以不进入python shell直接执行python代码
需要留意的是,自带一个gdb
模块
利用gdb模块,查看所有断点
python print(gdb.breakpoints)
其他
查看当前行数附近行或者指定函数
默认显示10行
list
搜索关键字
search