linux c 小程序 gdb调试命令 例子
1:调试函数的一系列命令,源代码如下main.c
#include <stdio.h>
int add_range(int low, int high)
{
int i,sum;
for(i=low;i<=high;i++)
sum=sum+i;
return sum;
}
int main(void)
{
int result[100];
result[0]=add_range(1,10);
result[1]=add_range(1,100);
printf("result[0]=%d\nresult[1]=%d\n",result[0],result[1]);
return 0;
}
结果为55 5015 与正确结果不同,调试如下
1步骤: gcc -g main.c -o main linux下c源文件编译(含有源代码,可以调试):
gdb main 进入main函数的调试
help帮助
l 1或者 l main 查看源代码
start开始调试
n(next)下一步
s(step)跳进函数
bt(backtrace)查看函数调用的栈帧
i(info) locals 查看方法的局部变量
f(frame) 1 选择1号栈帧
i locals 查看1号栈帧的局部变量,即main函数的局部变量
p(print) sum 查看sum变量的值
finish 跳出当前函数,回到main函数
set var sum=0 修改变量sum的值为0
p(print) result[2]=33 print也可以像set一样设置变量的值
2
int main()
{
int sum=0,i=0;
char input[5];
while(1)
{
scanf("%s",input);
for(i=0;input[i]!='\0';i++)
sum=sum*10+input[i]-'0';
printf("input=%d\n",sum);
}
return 0;
}
第一次输入123正确,第二次错误
调试命令如下:
start 启动调试
display sum 每次定下来都显示sum的值
undisplay 取消对这个变量的跟踪
b(break) 9 在第9行设置一个断点 参数也可以是函数名
c(continue) 表示连续运行,跳到下一个断点
i breakpoints 显示已经设置的断点
delete breakpoints 2 删除断点2
delete breakpoints 删除所有的断点
disable breakpoints 3 使某个断点失效
break 9 if sum != 0 满足条件才可以使用该断点
r 重新从程序开始连续执行
x 命令打印存储器中的内容 x/7b input 7b是打印格式,b表示每个字节一组,7表示打印7组
watch input[5] 跟踪某变量