run(r) | 运行 |
start | 开始执行程序,停在main函数第一行语句前面等待命令 |
查看代码 | |
list(l) | 列出附近代码 |
断点 | |
break sum | 在函数sum入口设置断点 |
break 1 | 在第一行设置断点 |
break *0x80 | 在地址0x80处设置断点 |
delete 1 | 删除断点1 |
break info | 查看断点信息 |
执行 | |
next(或n) | 执行下一行语句 |
step(或s) | 执行下一行语句,如果有函数调用则进入到函数中 |
finish | 连续运行到当前函数返回为止,然后停下来等待命令 |
continue | 继续执行,相对break |
检查代码 和 数据 | |
print result | 查看result变量值 |
set resule = 0 | 设置变量的值 |
backtrace(bt) | 查看各级函数调用及参数 |
frame(f) eg: f 1 | 选择栈帧 |
info locals | 查看当前帧的局部变量值 |
info frame | 有关当前栈帧的信息 |
info regisiters | 所有寄存器的值 |
退出 | |
quit | 退出gdb调试 |
|
g++ -g main.cpp -o main
gdb main
set args (1 2)
例子参考:http://www.cnblogs.com/hankers/archive/2012/12/07/2806836.html
命令参考:http://www.jb51.net/article/36393.htm
在某些时候,很有可能你的变量和GDB中的参数冲突,如:
(gdb) whatis width
type = double
(gdb) p width
$4 = 13
(gdb) set width=47
Invalid syntax in expression.
因为,set width是GDB的命令,所以,出现了“Invalid syntax in expression”的设置错误,此时,你可以使用set var命令来告诉GDB,width不是你GDB的参数,而是程序的变量名,如:
(gdb) set var width=47
另外,还可能有些情况,GDB并不报告这种错误,所以保险起见,在你改变程序变量取值时,最好都使用set var格式的GDB命令。