GDB常用指令
2008年9月8日 星期一 by Anati
在Linux中寫了一個程式,但往往執行的結果都是出乎你的意料,因為可能是某個部份邏輯錯誤,所以可能會造成程式當掉了,因此我們使用GNU gdb這個除錯程式來除bug,而常使用的基本指令和基本用法,介紹給大家。
※ 編譯時加入-g的參數
為了讓gdb可以debug你的程式,所以在你編譯的期間,必須加入-g的參數,如此才可以讓gdb來除錯,所以編譯時的語法。
gcc ex.c -g -o ex
基本上編不過就是你程式語法或是語義的錯誤,而除錯主要是用在,程式可以正確的執行,但是執行出來的結果卻不是你要的,如果才需要除蟲。開始執行gdb除錯程式。
gdb ./your_programe
※ gdb的指令
進入gdb之後會類似像shell一樣有個提示字元,所以也和shell一樣要輸入你要執行的指令。
1. 環境的設定
* file ./your_programe 開始別的程式除錯
* set args xxx xxx 將xxx xxx當成參數執行你的程式
* set listsize n 設定使用list指令會一次顯示n行
2. 中斷點的設定
* break(b) n | function_name 設定中斷點在行或函式
* break(b) filename:n 如果是多個c檔案時指定filename和第n行
* clear n 清除第n行的中斷點
* delete index 清除第index號的中斷點
* disable index 暫時使第index號中斷無作用
* enable index 使第index號中斷再作用
3. 開始執行debug
* run 當都設定好你要給此程式的參數後開始執行
* quit 離開gdb除錯程式
4. 開始追蹤程式
* continue(c) 繼續執行直到下一個中斷點或結束
* next(n) 執行一行程式碼,不會跳進函式去執行
* step(s) 執行一行程式碼,如果碰到函式會跳進函式內部去執行
* until(u) 跳離一個while for迴圈
5. 監看你想知道的變數值
* print(p) 印出某個變數的資料
* display 會每次step, next時都會印出值來,print只印一次
* list(l) 向下列出程式碼,和listsize行數有關
* list(l) - 向上列出程式碼,和listsize行數有關
* list(l) n 列出第n行的程式碼
6. 其它觀看設定
* info (i) break (b) 看目前有建立的中斷點列表
* show args 顯示目前給此程式的參數
* show listsize 顯示目前使用list指令會一次顯示多少行
※ 編譯時加入-g的參數
為了讓gdb可以debug你的程式,所以在你編譯的期間,必須加入-g的參數,如此才可以讓gdb來除錯,所以編譯時的語法。
gcc ex.c -g -o ex
基本上編不過就是你程式語法或是語義的錯誤,而除錯主要是用在,程式可以正確的執行,但是執行出來的結果卻不是你要的,如果才需要除蟲。開始執行gdb除錯程式。
gdb ./your_programe
※ gdb的指令
進入gdb之後會類似像shell一樣有個提示字元,所以也和shell一樣要輸入你要執行的指令。
1. 環境的設定
* file ./your_programe 開始別的程式除錯
* set args xxx xxx 將xxx xxx當成參數執行你的程式
* set listsize n 設定使用list指令會一次顯示n行
2. 中斷點的設定
* break(b) n | function_name 設定中斷點在行或函式
* break(b) filename:n 如果是多個c檔案時指定filename和第n行
* clear n 清除第n行的中斷點
* delete index 清除第index號的中斷點
* disable index 暫時使第index號中斷無作用
* enable index 使第index號中斷再作用
3. 開始執行debug
* run 當都設定好你要給此程式的參數後開始執行
* quit 離開gdb除錯程式
4. 開始追蹤程式
* continue(c) 繼續執行直到下一個中斷點或結束
* next(n) 執行一行程式碼,不會跳進函式去執行
* step(s) 執行一行程式碼,如果碰到函式會跳進函式內部去執行
* until(u) 跳離一個while for迴圈
5. 監看你想知道的變數值
* print(p) 印出某個變數的資料
* display 會每次step, next時都會印出值來,print只印一次
* list(l) 向下列出程式碼,和listsize行數有關
* list(l) - 向上列出程式碼,和listsize行數有關
* list(l) n 列出第n行的程式碼
6. 其它觀看設定
* info (i) break (b) 看目前有建立的中斷點列表
* show args 顯示目前給此程式的參數
* show listsize 顯示目前使用list指令會一次顯示多少行