三、gdb調試(上)01.gdb:gdb是GNU debugger的縮寫,是編程調試工作。功能: 啟動程式,可以按照用戶自定義的要求隨心所欲的運行程式; 可讓被調試的程式在用戶所指定的調試的斷點處停住(斷點可以是條件表達式); 當程式停住時,可以檢測此時程式中所發生的事; 動態改變數程式的執行環境。
三、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)查看運行時的變數以及表達式