你的位置:首页 > 操作系统

[操作系统]Linux开发工具之gdb(上)


三、gdb调试(上)
01.gdb:gdb是GNU debugger的缩写,是编程调试工作。
功能:
  启动程序,可以按照用户自定义的要求随心所欲的运行程序;
  可让被调试的程序在用户所指定的调试的断点处停住(断点可以是条件表达式);
  当程序停住时,可以检测此时程序中所发生的事;
  动态改变量程序的执行环境。

#vi smiple.c
#include<stdio.h>
#include<stdlib.h>

long func(int n);

int main(int argc, char *argv[])
{
printf("Entering main ...\n");
int i;
long result = 0;
for(i=1;i<=100;i++)
{
result += i;
}
printf("result[1-100] = %ld\n",result);
printf("result[1-10]",func(10));
return 0;
}

long func(int n)
{
long sum = 0;
int i;
for(i=1;i<n;i++)
{
sum+=1;
}
return sum;
}
:wq
#gcc -Wall -g(以便生成调试,将源文件显示出来) simple.c -o 

simple
#./simple
#gdb simple
(gdb)list(显示所有源代码)
(gdb) l(同上)
(gdb)break 10(在第10行设置断点)
(gdb)info break(查看断点信息)  --ib(简写)
(gdb)b func(在函数入口设置断点)
(gdb)run --r(运行到断点处)
(gdb)step --s(单步跟踪)
(gdb)print i --p i(打印出i的当前值)
(gdb)p result
result=3
(gdb)p i
(gdb)s
(gdb)until(跳出for循环,循环的下一条语句)
(gdb)c(continue运行到下一个断点处)
(gdb)直接按回车,使用上一次的命令
(gdb)finish(结束单步调试)


#vi Makefile
.PHONY:clean all
CC=gcc
CFLAGS=-Wall -g
BIN=simple main
all:$(BIN)
$(CC) $(CFLAGS) -c $< -o $@
main:main.o search.o
$(CC) $(CFLAGS) &^ -o $@
clean:
rm -f *.o $(BIN)
:wq

#gdb simple
(gdb)r a b c(给程序加上启动参数)
(gdb)list fun(查看fun的函数源码)
(gdb)list file:fun(查看file文件中的fun函数源码)

02.设置断点与观察点
break 行号
break fun
break file:行号
break file:fun
break if<condition>-条件成立时程序停住
info break(i b)-查看断点
watch expr -变量expr值发生改变,程序停住
delete n - 删除断点

03.单步调试
continue(c)-运行至下一个断点
step(s)- 单步跟踪,进入函数,类似于VC中的step in
next(n)-单步跟踪,不进入函数,类似于VC中的step out
finish - 运行程序,直到当前函数完成返回。并打印函数返回时的堆栈地址和返回值及参数等信息。
until - 当厌倦了在一个循环体内单步跟踪时,这个命令可以运行程序直到退出循环体
print(p)查看运行时的变量以及表达式