代码实例: hello.c
#include <stdio.h>
#include <stdlib.h>
void fun()
{
printf("方法:fun()\n");
char data[5]={'h','e','l','l','o'};
int i;
for(i=0;i<5;i++){
printf("data 数组的第%d位是:%c\n",i,data[i]);
}
data[12030126]='s';
}
int main(){
printf("Hello World\n");
fun();
exit(0);
}
1. 编译生成可执行文件 hello.c -->hello
# 注意:调试时一定要带上 -g 选项。如果没有,调试时看不见程序的函数名、变量名。只能看到运行时的内存地址
gcc -g -o Hello Hello.c
2. 启动gdb
gdb Hello
3. 可以使用help 查看相关命令
4. 退出使用quit 命令,简写 q
5. backtract 查看栈信息
下图表示main函数调用了fun函数后在11行
6. print ----- 检测变量.
7. list + num 列出num行程序源代码,默认10行
list + 函数名 列出函数名的源代码
lsit - 列出当前行前面的源代码
set listsize num 设置list 默认的显示行数
show listsize 查看list 默认的显示行数
8. break + 行号 或着 break + 函数名
b 行号 if xxxx 条件断点
9. 调试基本命令:
c (cont) == continue 继续执行
n == Step Over 调试下一行
s == Step Into 进入这一行代码
f (finish) == 退出函数
10. commands 命令设置断点的执行命令 .以end结束
设置断点在第10行,然后设在commands : 先打印data数组的值,然后将data[0]修改为‘A’ ,再次打印data数组。
11. 打印设置的断点:info break
12. d == delete 删除断点
13. 禁用/恢复相关设置
disable b(break) num / enable b num
disable display num / enable d num
禁用12相关断点
14. display
display 和 print的功能一样都是打印变量等信息的。区别在于只要调试不退出(quit)。每次运行到相关断点位置都会打印相关变量。(注意:和断点配合使用)
每次run 后,运行第10行代码后,就会打印一次data[0]@5 = “hello”
查看:info display,删除 d display