GNU Debugger (GDB) 是 GNU 系統的開源調試器。 調試器是可移植的,可用於 C/C++ 和 Fortran 等多種語言。 它可用於通過觀察特定斷點上的狀態甚至更改流程或值以進一步執行來調試程序。 通常,GDB 在命令行中運行,但也為它開發了幾個 GUI。
在本文中,我們將探討如何在 Ubuntu 20.04 LTS (Focal Fossa) 中使用 GDB 調試 C 程序。
先決條件
- Ubuntu 20.04 系統
- 用戶與 sudo 重命名多個文件的權限。
筆記: 本文中討論的命令已在 Ubuntu 20.04 LTS (焦點窩)。
安裝包
安裝必備的 GN 包以進行編譯和調試。 在終端中運行以下命令:
$ sudo apt 安裝 gcc gdb -y
C-程序 example 用於調試
代碼
在運行之前,需要編譯一個程序。 我們將在文件 main.c 中編譯以下 C 代碼。
#include 通常,使用以下命令在 GCC 中編譯 C 代碼: $ gcc main.c -o bin 需要提供另一個參數以在二進製文件中包含符號。 GDB 使用這些符號來跟踪和調試程序。 在終端中運行以下命令來編譯 C 代碼: $ gcc -g main.c -o bin 將出現一個名為 bin 的可執行文件。 名為 bin 的二進製文件可以像命令行界面上的任何其他可執行文件一樣執行。 使用以下命令在終端中運行它: $ ./bin 代碼的輸出將出現。 在終端中使用以下命令運行 GDB 實用程序: $ gdb bin 按回車鍵。 將出現 GDB 終端的控制台。 Enter 此控制台中的 run 命令運行作為參數提供給實用程序的可執行文件。 (gdb) 運行 可以通過多種方式添加斷點。 我們將在代碼中的 printf 函數上添加一個斷點。 在終端中運行以下命令添加斷點: (gdb) 中斷 printf 或者,也可以使用行號來添加斷點。 (gdb) 突破 6 Enter 運行命令和程序將在斷點處停止。 使用命令 continue 繼續執行程序。 (gdb) 繼續 還有另外兩個用於不同目的的命令來繼續執行程序: 也可以使用命令的縮寫。 像 continue 命令的縮寫是 c。 (gdb) c 可以使用 gdb 的 info 命令觀察斷點信息。 在終端運行以下命令: (gdb) 信息斷點 將出現有關斷點的信息。 注意:斷點左邊的數字是用來被其他命令引用的。 可以使用 delete 命令並參考在 info 實用程序的輸出中觀察到的斷點編號來刪除斷點。 (gdb) 刪除 1 現在斷點已被刪除,如果運行,程序將直接執行到最後。 可以使用 watch 實用程序監視變量。 首先,我們需要輸入變量存在的作用域。 為此,首先使用以下命令添加斷點: (gdb) 突破 6 然後運行命中該斷點的代碼。 (gdb) r 現在我們處於變量 i 存在的循環中。 watch 命令將用於觀察循環中變量 i 的先前值和新值。 (gdb) 看我 現在 watch 命令生成的斷點也將出現在斷點列表中。 可以使用以下命令顯示斷點列表: (gdb) 信息斷點 而且,我們不需要之前插入的斷點。 可以使用以下命令輕鬆刪除它: (gdb) 刪除 1 現在,如果繼續,代碼將在變量更改值時查看值並顯示舊值和新值。 (gdb) c 也可以使用相同的命令觀察程序的進一步迭代。 在終端中運行以下命令以退出調試器。 (gdb) 退出 這 close gdb 實用程序和默認的命令行提示符將出現。 在本文中,我們探討瞭如何在 GDB 中運行和中斷程序。 此外,它還被配置為在變量的值發生變化時自行中斷。 我們希望您在閱讀本文後可以輕鬆地在 GDB 中調試您的程序。使用 GCC 編譯 C 程序
執行測試程序
在 Linux 上調試應用程序
啟動調試器
調試斷點
添加斷點
單步執行斷點
關於斷點的信息
刪除斷點
觀察變量
退出調試器
結論