社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
一般来说,GDB主要帮助你完成下面三个方面的功能:
命令 | 解释 | 简写 |
file | 加载一个可执行文件,也可以在运行gdb的时候加载,两种方法都不会运行程序。例如:gdb ./main | 无 |
list | 列出可执行源码的一部分,通常在程序开始运行前执行,用来设置断点 | l |
next | 单步调试,不进入函数 | n |
step | 单步调试,进入函数 | s |
run | 运行加载了的程序 | r |
continue | 继续执行程序 | c |
quit | 退出调试 | q |
输出制定的变量的值,变量要在程序运行处可见 | p | |
break | 设置断点 | b |
info break | 查看断点的信息 | i b |
delete | 删除断点 | d |
watch | 监视一个变量的值,一旦值发生变化,程序将会被暂停执行 | wa |
help | 查看gdb的帮助信息 | h |
使用举例:
源代码:
#include <stdio.h>
int print() {
int i = 100;
printf("%dn", i + 11);
return 0;
}
int main() {
int a;
print();
a = 110 + 1;
printf("main: %dn", a + 111);
return 0;
}
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">运行gdb,我在运行的时候加载了可执行文件./main。可已在运行的时使用file ./main来达到同样的效果。</span>
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">加载成功之后会在最下面显示:Reading symbols from 可执行文件名,,.done</span>
然后用list 命令列出源码的一部分:
使用break命令设置断点:
run这个调试程序:
使用watch监视一个变量:
被监视的变量一发生变化就会停止程序:
使用step进入函数:
使用info break命令查看断点信息,还可以看一个断电是否被执行过了:
使用print命令查看一个变量的值,等号右边才是这个变量的值:
使用delete删除断点, d 断点编号,编号可以使用info break命令来查看,上面找到的断点的编号为1:
输入continue继续运行程序,如果有断点则在断点处停止,没有则直接执行完毕,退出成可执行程序,注意不是退出gdb:
以上!
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!