Linux开发工具之gdb(上)

时间:2021-02-25 21:43:54
三、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)查看运行时的变量以及表达式