从零上手 GDB 调试,看这个教程就够了~
前言
在為 Linux 開發應用程序時,很多情況下都需要使用 C 語言進行開發,因此幾乎每一位 Linux 程序員面臨的首要問題都是:如何靈活運用 C 編譯器。
目前 Linux 下最常用的 C 語言編譯器是 GCC。GCC 編譯器是 GNU 開源組織發布的多平臺編譯器,它可以將 C、C++ 等多種語言編寫的源程序編譯、鏈接成可執行文件。而 GDB 是 GNU 推出的功能強大的程序調試器,可以說,GCC 與 GDB 是在 Linux 環境下進行 C 程序開發不可或缺的工具,也是 Linux 程序員必須掌握的技能之一。
GCC的歷史
GNU 計劃是由理查德·斯托曼在 1983 年 9 月 27 日公開發起的自由軟件集體協作計劃,主要目的是創建一個名叫 GNU’s Not Unix(GNU) 的完全免費的操作系統。該操作系統將包括絕大多數自由軟件基金會所開發的其他軟件,以對抗所有商業軟件,而這個操作系統的核心(kernel)就叫 HURD。
但是 GNU 在開發完全免費的操作系統上并未取得成功,直到 20 世紀 90 年代由林納斯·本納第克特·托瓦茲(Linus Benedict Torvalds)開發了 Linux 操作系統,GNU 才算在免費操作系統上完成了任務。雖然 GNU 計劃在開發免費操作系統上不成功,但是卻成功開發出幾個廣為流傳的 GNU 軟件,其中最著名的是GNU C Complier(GCC)。
GCC 這個軟件成為歷史上最優秀的 C 語言編譯器, 其執行效率與一般的編譯器相比平均效率要高 20%~30%,使得那些靠販賣編譯器的公司大吃苦頭,因為它們無法研制出與 GCC 同樣優秀,卻又完全免費、并開放源代碼的編譯器來。它還有一個十分特殊而且不同尋常的意義:幾乎所有的自由軟件都是通過它編譯的。可以說,它是自由軟件發展的基石與標桿。
現在,GCC 已經可以支持 7 種編程語言和 30 種編程結構,是學術界最受歡迎的編譯工具。其他 GNU 軟件還包括 GNU emacs、GNU Debugger(GDB)、GNU Bash 以及大部分 Linux 系統的程序庫和工具等。目前,GCC 已發展到了 8.x 的版本,幾乎所有開源軟件和自由軟件中都會用到,因此它的編譯性能會直接影響到 Linux、Firefox、OpenOffice.org、Apache 以及一些數不清的小項目的開發。
GCC 無疑處在開源軟件的核心地位,經過這么多年的發展,GCC 已經不僅僅能支持 C 語言,它現在還支持 Ada、C++、Java、Objective-C、Pascal、COBOL 以及函數式編程和邏輯編程的 Mercury 語言等。因此,現在的 GCC 已經變成了 GNU Compiler Collection,也即是 GNU 編譯器套件的意思了。
初步使用GCC
GCC 僅僅是一個編譯器,沒有界面,必須在命令行模式下使用。通過gcc命令就可以將源文件編譯成可執行文件。GCC 既可以一次性完成 C 語言源文件的編譯,也可以分步驟完成。
我們先完整演示如何一次性完成源文件的編譯,讓大家對 GCC 的使用有一個初步的了解。
以下面簡單的 C 語言程序為例,打開 Sublime Text 輸入代碼,保存到桌面上,命名為 demo.c。
#include <stdio.h> int main() {puts("shiyanlou");return 0; }
生成可執行程序
在 Linux 下編譯 C 語言程序,一般的 Linux 發行版都內建的有 GCC,無需用戶再自行安裝。打開 Xfce 終端,使用以下命令查看 GCC 版本:
gcc -v
輸入以下命令,生成可執行程序文件:
我們能夠發現在桌面上多了一個名為 a.out 的文件,這就是最終生成的可執行文件。
這樣我們就完成了編譯和鏈接的過程。值得一提的是,Linux 不像 Windows 那樣以文件后綴來區分可執行文件,Linux 下的可執行文件后綴理論上可以是任意的,這里的 .out 只是用來表明它是 GCC 的輸出文件。不管源文件的名字是什么,GCC 生成的可執行文件的默認名字始終是 a.out。
如果不想使用默認的文件名,那么可以通過 -o 選項來自定義文件名:
$ gcc demo.c -o demo.out這樣生成的可執行程序的名字就是 demo.out。可執行文件也可以不帶后綴,因為 Linux 下可執行文件的后綴僅僅是一種形式上的:
$ gcc demo.c -o demo這樣生成的可執行程序的名字就是 demo。
通過 -o 選項也可以將可執行文件輸出到其他目錄,并不一定非得在當前目錄下,例如:
$ gcc democ -o ../demo.out表示將可執行文件輸出到上一層目錄,并命名為 demo.out。../ 表示上一層目錄,如果不寫,默認也是當前目錄。這里的上一層目錄是 shiyanlou,打開該目錄能夠看到生成的可執行文件 demo.out。
運行可執行程序
既然我們已經生成了可執行程序,現在我們來學著如何運行它。執行以下命令:
$ ./a.out./ 表示當前目錄,整條命令的意思是運行當前目錄下的 a.out 程序。如果不寫./,Linux 會到系統路徑下查找 a.out,而系統路徑下顯然不存在這個程序,所以會運行失敗。
**注意:**如果程序沒有執行權限,可以使用 sudo chmod 777 a.out 命令來增加權限。
到這里,一次完整的編譯流程就結束了。以上內容出自實驗樓課程——《GDB基礎入門實戰》。
課程通過動手實驗學習 Linux 上 GCC 編譯與 GDB 調試 C 語言程序的基本技巧。分別對 GCC 編譯和 GDB 調試進行了詳細介紹。
你將學習到:
課程地址:GDB 基礎入門實戰
總結
以上是生活随笔為你收集整理的从零上手 GDB 调试,看这个教程就够了~的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 搞机器学习需要数学基础吗?
- 下一篇: 偷懒大法好,用 selenium 做 w