GCC 除錯/gdb
外觀
< GCC 除錯
- 程式必須先進行編譯以便除錯
- gcc -g <filname.c> -o <輸出檔名>
- 例如: gcc -g debug_me.c -o debug_me
- "-g" 標誌很重要(為了建立符號表)
- 使用以下命令啟動偵錯程式
- gdb <程式名稱>
- 例如: gdb debug_me
- 執行、列印、where、斷點、cond、單步、下一步、設定、忽略
- 執行程式
- 在執行時向程式傳遞引數
- run <arg1> <arg2>
- 例如: run 12 35
- 例如: run "hello world" "goodbye world"
- 在特定區域\函式處設定“斷點”
- break <函式名稱>
- 例如: break main
- 或
- 例如: b main
- break <檔名>:<要停止的程式碼行>
- 例如: break debug_me.c:5
- 斷點的簡寫
- 執行下一行程式碼
- 例如: next
- 下一行程式碼,單步進入函式
- 例如: step
- 轉到下一個斷點或程式結束
- 繼續的簡寫
- 列印變數\表示式的值
- print <變數名>
- 例如: print x
- 在每一步都列印變數\表示式的值
- 例如: disp x
- 取消顯示命令
- 例如: undisplay 3
- 將停止位置 3 處的變數在每次顯示時都顯示
- 在呼叫堆疊中移動
- ...
- 上移: 呼叫堆疊中的上一步
- 下移: 呼叫堆疊中的下一步
- 顯示特定位置的程式碼
- list <無引數>
- 顯示當前位置的程式碼,然後再次輸入時顯示下一個位置的程式碼
- 例如: list
- list -
- 顯示先前位置的程式碼,然後再次輸入時顯示之前的位置的程式碼
- list <函式名稱>
- 顯示函式定義中的程式碼
- 例如: list func1
- 條件
- cond <斷點> <條件>
- 例如: cond 1 val>0
- 當“val”大於 0 時,在斷點“1”處停止
- 更改值,例如
- set variable x = 12
- 將把 x 的值更改為 12
忽略斷點指定次數。
用法: ignore <id> <count>
ignore 2 20 --> 斷點 2 將不會被命中 20 次。
- 退出 gdb
- 退出的簡寫