為什麼除錯的時候需要編譯選項中新增 g

2021-08-18 10:54:27 字數 408 閱讀 9934

預設編譯生成的可執行檔案是無法使用 gdb 來跟蹤或除錯的,因為可執行程式中沒有可供 gdb 除錯使用的特殊資訊,為了將必要的除錯資訊整合到可執行檔案中,我們便需要用到 -g 選項,這樣生成的可執行程式,倘若出現問題,便可以使用 gdb 找出問題具體出現的位置,便於問題的解決。

如下

#gcc -g test.c
「-g」標誌是對程式進行除錯性編譯時常用的選項。我們需要給每乙個需要除錯的原始檔都加上這個選項。它將使用特殊版本的c語言標準庫完成編譯和鏈結操作,給庫函式加上程式除錯方面的支援。編譯器會把這些標誌自動傳給鏈結器。

加上-g選項以後,gcc在編譯是會做以下額外的操作:

建立符號表,符號表包含了程式中使用的變數名稱的列表。

關閉所有的優化機制,以便程式執行過程中嚴格按照原來的c**進行。

交叉編譯,為什麼需要交叉編譯

本地編譯 本地編譯可以理解為,在當前編譯平台下,編譯出來的程式只能放到當前平台下執行。平時我們常見的軟體開發,都是屬於本地編譯 比如,我們在 x86 平台上,編寫程式並編譯成可執行程式。這種方式下,我們使用 x86 平台上的工具,開發針對 x86 平台本身的可執行程式,這個編譯過程稱為本地編譯。交叉...

為什麼在做微服務設計的時候需要DDD?

隨著對充血模型的領域認知的加深,我越加感覺到ddd的重要性。於是網上一頓海找,並做了學習筆記。ddd內容繁多,個人淺見,它不同於傳統貧血的最核心的一點就是把原先傳統的貧血模型裡的業務邏輯層拎出來,融入到domain層,這樣面對複雜業務的規模化變更,我們只需要專注於domain即可。回到主題,我們要了...

vs斷點除錯需要修改的幾個選項

vs不能除錯其實問題在於,在空專案中不生成除錯檔案pdb,所以無法除錯。要讓專案生成pdb檔案,需要更改 專案屬性,configuration properties linker generate debug info 從 no 改為 yes 專案屬性 屬性 聯結器 除錯 生成連線資訊改為 是 但這...