GDB是一个命令行下的调试工具,他非常强大 有着一些图形界面调试程序没有的功能。下面雅乐网为大家介绍一下gdb调试程序的基本用法。
环境安装
windows环境下安装gdb,可以参考sublime text 3配置c/c++编译环境,将mingw添加到系统环境变量即可。
单步调试
下面雅乐网以一个例子为例给大家介绍一下gdb的基本命令和用法。首先我们新建一个c文件
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#include <stdio.h> int cal_sum(int a, int b); int main(void) { int result[10]; result[0] = cal_sum(1, 10); result[1] = cal_sum(1, 100); printf("cal(1, 10) = %d\n", result[0]); printf("cal(1, 100) = %d", result[1]); return 0; } int cal_sum(int a, int b) { int i, sum = 0; for (i = a; i <= b; i++) { sum = sum + i; } return sum; } |
要想用gdb进行调试,在编译的时候就要加上-g选项 这个可以把编译调试的信息加到可执行文件中,方便调试。如果没有-g选项,调试的时候就没有相应的变量名和内存地址的对应信息。
因此 我们来到该目录下 编译
可以看到生成了一个main.exe文件
使用命令 gdb 文件名 可以调试该执行文件
(gdb)就表示现在进入了gdb的命令界面,可以使用gdb的一些命令了。
查看源代码 list命令 简写l
默认每次查看10行。直接按回车 可以重复上次的命令。
开始执行 start命令
start命令开始执行程序 程序将停在变量声明后的第一条语句的地方
单步执行 next 简写n
执行n命令可以执行下一步,如果包含函数将直接跳过 而不进入函数内部 相当于图形界面下的step over
step into命令 step简写s
s命令可以进入到函数内部
backtrace命令(简写为bt)可以查看函数调用的栈帧
可见当前函数cal_sum是被main函数调用 传递的参数是 a=1 b=10
查看变量值 info 简写i
使用i locals可以查看当前栈的局部变量
也可以查看main函数的局部变量 先用frame命令(简写为f)选择1号栈帧然后再查看局部变量:先用frame命令(简写为f)选择1号栈帧然后再查看局部变量:
用print命令(简写为p)打印出变量的值:
使用finish命令跳出函数
使用p命令查看变量
总结
| 命令 | 描述 |
|---|---|
| backtrace(或bt) | 查看各级函数调用及参数 |
| finish | 连续运行到当前函数返回为止,然后停下来等待命令 |
| frame(或f) 帧编号 | 选择栈帧 |
| info(或i) locals | 查看当前栈帧局部变量的值 |
| list(或l) | 列出源代码,接着上次的位置往下列,每次列10行 |
| list 行号 | 列出从第几行开始的源代码 |
| list 函数名 | 列出某个函数的源代码 |
| next(或n) | 执行下一行语句 |
| print(或p) | 打印表达式的值,通过表达式可以修改变量的值或者调用函数 |
| quit(或q) | 退出gdb调试环境 |
| set var | 修改变量的值 |
| start | 开始执行程序,停在main函数第一行语句前面等待命令 |
| step(或s) | 执行下一行语句,如果有函数调用则进入到函数中 |

支付宝打赏
微信打赏