GNU Debugger (GDB) 是 GNU 系統的開源調試器。該調試器具有可移植性,可用於C/C++、Fortran等多種語言。它可用於通過監視特定斷點的狀態、更改流程和值以及執行更多操作來調試程序。 GDB 通常從命令行運行,但也為 GDB 開發了一些 GUI。
本文介紹如何在 Ubuntu 20.04 LTS (Focal Fossa) 上使用 GDB 調試 C 程序。
先決條件
- Ubuntu 20.04 系統
- 具有重命名多個文件的 sudo 權限的用戶。
筆記: 本文中描述的命令是 Ubuntu 20.04 LTS (焦點巢)。
安裝包
安裝必備的 GN 包進行編譯和調試。在終端中運行以下命令:
$ sudo apt install gcc gdb -y
用於調試的 C 程序示例
代碼
您需要先編譯程序,然後才能運行它。 將以下 C 代碼編譯到 main.c 文件中。
#include <stdio.h> int main() { for (int i=0; i<5; ++i) { printf("Iterator: %dn", i); } return 0; }
用 GCC 編譯 C 程序
通常,使用以下命令使用 GCC 編譯 C 代碼:
$ gcc main.c -o bin
要將符號包含在二進製文件中,您需要指定不同的參數。 GDB 使用這些符號來跟踪和調試您的程序。通過在終端中運行以下命令來編譯 C 代碼:
$ gcc -g main.c -o bin
您應該會看到一個名為 bin 的可執行文件。
運行測試程序
名為 bin 的二進製文件可以像命令行界面上的任何其他可執行文件一樣運行。使用以下命令在終端中運行它:
$ ./bin
顯示代碼的輸出。
在 Linux 上調試您的應用程序
啟動調試器
使用以下命令在終端中運行 GDB 實用程序:
$ gdb bin
按 Enter。 顯示 GDB 終端的控制台。此控制台上的運行命令運行作為實用程序參數提供的可執行文件。
(gdb) run
調試斷點
添加斷點
可以通過多種方式添加斷點。在代碼中的 printf 函數中添加斷點。在終端中運行以下命令以添加斷點。
(gdb) break printf
或者,您可以使用行號添加斷點。
(gdb) break 6
Enter 執行命令,程序在斷點處停止。
單步斷點
使用命令 continue 繼續運行程序。
(gdb) continue
還有另外兩個用於不同目的的命令來保持程序運行。
- Step:單步執行下一條機器指令。
- Next:單步執行下一行代碼。
您還可以使用命令縮寫。 continue 等命令的縮寫是 c。
(gdb) c
關於斷點的信息
可以使用 gdb info 命令監視斷點信息。在終端中運行以下命令:
(gdb) info breakpoints
顯示有關斷點的信息。
注意:斷點左邊的數字是用來被其他命令引用的。
刪除斷點
可以使用 delete 命令並引用 info 實用程序的輸出中找到的斷點編號來刪除斷點。
(gdb) delete 1
斷點已被移除,所以當你運行它時,程序直接運行到最後。
觀察到的變量
可以使用監視實用程序監視變量。首先,我們需要輸入變量所在的範圍。為此,首先添加以下斷點:
(gdb) break 6
然後運行到達該斷點的代碼。
(gdb) r
您現在有了一個帶有變量 i 的循環。
watch命令用於循環監控變量i的前值和新值。
(gdb) watch i
watch 命令生成的斷點現在也將出現在斷點列表中。您可以使用以下命令查看斷點列表:
(gdb) info breakpoints
此外,您不需要之前插入的斷點。您可以使用以下命令輕鬆刪除它:
(gdb) delete 1
如果繼續這裡,代碼會檢查值並在變量改變值時顯示新舊值。
(gdb) c
您還可以使用相同的命令來觀察程序的進一步迭代。
退出調試器
通過在終端中運行以下命令退出調試器:
(gdb) quit
將顯示一個關閉 gdb 的實用程序和一個默認的命令行提示符。
結論是
本文介紹瞭如何在 GDB 中運行和中斷程序。此外,它被配置為在變量的值發生變化時自行中斷。讀完這篇文章,希望你能用 GDB 輕鬆調試你的程序。