Linux开发工具之gdb(上),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 resultresult=3(gdb)p i(gdb)s(gdb)until(跳出for循环,循环的下一条语句)(gdb)c(continue运行到下一个断点处)(gdb)直接按回车,使用上一次的命令(gdb)finish(结束单步调试)#vi Makefile.PHONY:clean allCC=gccCFLAGS=-Wall -gBIN=simple mainall:$(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 funbreak file:行号break file:funbreak if<condition>-条件成立时程序停住info break(i b)-查看断点watch expr -变量expr值发生改变,程序停住delete n - 删除断点03.单步调试continue(c)-运行至下一个断点step(s)- 单步跟踪,进入函数,类似于VC中的step innext(n)-单步跟踪,不进入函数,类似于VC中的step outfinish - 运行程序,直到当前函数完成返回。并打印函数返回时的堆栈地址和返回值及参数等信息。until - 当厌倦了在一个循环体内单步跟踪时,这个命令可以运行程序直到退出循环体print(p)查看运行时的变量以及表达式

相关内容