導航:首頁 > 源碼編譯 > 調試時對c語言編譯的目的

調試時對c語言編譯的目的

發布時間:2025-03-29 14:48:39

❶ 【C-32】C語言調試工具gdb

GDB(GNU Debugger)是GCC的調試工具,主要用於幫助開發者完成以下四個方面的功能:

當程序運行的結果與預期不符合時,可以使用gdb進行調試。需要注意的是,在使用gdb調試時,需要在編譯時添加-g參數。如果沒有添加-g參數,將無法看到程序的函數名、變數名,而是顯示運行時的內存地址。

以【C-30】C語言gcc編譯器和靜動態庫的四個簡單函數為例,以下是修改後的Makefile($(CC) -g -c $< $(CPPFLAGS)):

啟動gdb:gdb program

其中,program指的是你的執行文件,通常位於當前目錄下。設置運行參數,啟動程序,退出gdb時使用quit。

GDB可以列印出所調試程序的源代碼,前提是在程序編譯時添加了-g參數,將源程序信息編譯到執行文件中。當程序停下來後,GDB會報告程序停在了哪個文件的第幾行上。使用list命令可以列印程序的源代碼,默認列印10行。list命令的用法如下所示:

一般是列印當前行的上5行和下5行,默認是10行。當然,你也可以定製顯示的范圍。使用下面命令可以設置一次顯示源程序的行數。

list可以簡寫為l。

斷點操作包括:簡單斷點、多文件設置斷點、查詢所有斷點、條件斷點、維護斷點。其中,break命令用於設置斷點,可以簡寫為b。在進入指定函數時停住,可以使用指定文件和行號設置斷點。查詢所有斷點可以使用info breakpoints命令。

條件斷點通常使用if關鍵詞,後面跟其斷點條件。設置一個條件斷點,可以使用如下命令:

維護斷點可以使用delete命令刪除指定的斷點,其簡寫命令為d。如果不指定斷點號,則表示刪除所有的斷點。range表示斷點號的范圍(如:3-7)。

比刪除更好的一種方法是disable停止點,disable了的停止點,GDB不會刪除,當你還需要時,enable即可,就像回收站一樣。

查看變數的值可以使用watch命令,自動顯示變數的值可以使用display命令。使用set var命令可以修改變數的值,例如:set var width=47(將變數width值設置為47)。

main函數的第一個參數是主程序,後面是自己的參數。

設置參數並顯示,例如:set args yifan nihao。

在項目中進行地址切詞部分的debug時,可以按照以下步驟操作:

1. 編譯部分添加-g參數:sudo g++ -O3 -lpthread -std=c++11 -g wb_word_cut.cpp -I/u03/wb/addr_i1_cpp/addr_20/dict/include -o /u03/wang/addr_i1_cpp/addr_20/run_wb/wb_word_cut_gdb

2. 開啟gdb,並輸入參數:

3. 設置斷點,使用list查找要打斷點的位置,設置斷點。

4. 測試,查看效果情況:

❷ C語言文件的編譯與執行的四個階段並分別描述

C語言程序的執行經歷了四個主要階段:預處理、編譯、鏈接和運行。以下是這四個階段的詳細描述:
1. **預處理階段**:
在這個階段,C語言源代碼被預處理器(C Preprocessor, CPP)處理。預處理器會處理所有包含的文件指令(如#include),展開宏定義(如#define),並處理條件編譯指令(如#ifdef、#ifndef)。預處理後的結果被保存為擴展名為.i的文件。
2. **編譯階段**:
編譯器接下來對預處理後的.i文件進行編譯。編譯過程包括詞法分析(識別源代碼中的單詞和符號)、語法分析(檢查單詞和符號的組合是否符合C語言的語法規則)、語義分析(確保代碼有意義,比如變數使用前已經定義)以及代碼優化。編譯的最終產物是一個或多個擴展名為.s的匯編語言文件,以及一個.o的目標文件,該文件包含了可以被計算機處理器直接執行的指令。
3. **鏈接階段**:
鏈接器將一個或多個目標文件.o合並成一個可執行文件.exe。在這個過程中,鏈接器還會處理程序中調用的外部函數,確保這些函數在程序運行時可以被找到。如果程序中使用了標准庫函數,鏈接器會連接到這些函數所在的庫文件上。
4. **運行階段**:
最後,可執行文件.exe在計算機上運行。操作系統載入該文件到內存中,並從程序的入口點開始執行指令,直到程序結束或者遇到中斷(如用戶輸入、系統調用等)。
通過這四個階段,C語言源代碼最終被轉換為可以在特定處理器上執行的程序。

❸ C語言中 debug error是什麼錯誤啊

debug error 是調試過程中產生的錯誤。

在調試過程中,運行時會插入額外的代碼檢查參數的合規性,操作的合法性等等(在發布版中,為提高效率則不會插入這些檢查)。

這些可以檢查出一些符合語法但不符合邏輯的行為。 debug error 就是在檢查不滿足(參數不合規,操作不合法)時產生的錯誤。

(3)調試時對c語言編譯的目的擴展閱讀:

C語言#error使用方法

編譯程序時,只要遇到#error就會跳出一個編譯錯誤,既然是編譯錯誤,要它的其目的就是保證程序是按照你所設想的那樣進行編譯的。

下面舉個例子:

程序中往往有很多的預處理指令

#ifdefXXX

...

#else

#endif

當程序比較大時,往往有些宏定義是在外部指定的(如makefile),或是在系統頭文件中指定的,當你不太確定當前是否定義了XXX時,就可以改成如下這樣進行編譯:

#ifdefXXX

...

#error"XXXhasbeendefined"

#else

#endif

這樣,如果編譯時出現錯誤,輸出了XXXhasbeendefined,表明宏XXX已經被定義了。

❹ C語言中編譯 生成 調試 測試 運行各是什麼意思有什麼區別

C語言中編譯 生成 調試 測試 運行的區別如下:

區別一:

從編譯方面來看:

編譯依賴於編譯器,英文是compile, vc中這一過程是將源代碼轉換成目標文件,如:obj文件,rc文件等。

區別二:

從生成方面來看:

生成指的是連接的過程,英文是build,依賴於鏈接器。vc中在這一階段將所有的目標文件和所有需要用到的組件組合成一個整體,例如需要生成的是windows系統下的PE可執行文件,鏈接器會依照特定格式將目標文件組合,最後生成PE格式的,exe或dll文件。

區別三:

從調試方面來看:

調試是所有或部分代碼編寫完成後,讓程序在調試器中運行,用這種手段對程序進行分析,找出並修正潛在問題。

區別四:

從運行方面來看:

運行就是讓程序在系統中運行。

(4)調試時對c語言編譯的目的擴展閱讀:

C語言的介紹:

C語言是目前流行的通用程序設計語言,是計算機專業人員和計算機愛好者開發軟體的首選開發工具。C語言源程序必須經過某種編譯工具翻譯成為目標機器語言程序才能夠在計算機上執行。

然而隨著程序編寫規模的擴大,順利編寫出正確的程序絕非一件容易的事情,早期的許多編譯工具僅僅提供翻譯功能,已滿足不了應用的要求,編程人員需要-種功能全面並高度集成的編譯環境。

程序是一段具有一定功能的代碼,編寫程序的目的是解決問題。當程序人員寫完程序後,其實並不起作用,只有當編寫的程序經過一系列的處理後,能夠解決問題時。

序才成為真正的程序,這一系列的處理過程,-般就是編輯、編譯、連接、調試與運行等。目前最成熟的C語言集成環境主要有Turbo C2.0和Turbo C 3.0( 簡稱TC30)或Borland C++3.1( 簡稱BC31)以及Visual C++ 6.0。

閱讀全文

與調試時對c語言編譯的目的相關的資料

熱點內容
怎麼加密公司文件 瀏覽:24
華為程序員崗位招聘信息 瀏覽:5
手機發票保存哪個文件夾 瀏覽:658
源碼定製網站源碼 瀏覽:551
程序員素養的書 瀏覽:183
zk解壓舊版本 瀏覽:720
linux關機按鈕 瀏覽:936
程序員成長能力 瀏覽:573
雲主機快還是伺服器快 瀏覽:800
公積金app怎麼申請公積金 瀏覽:467
電機的額定電流演算法 瀏覽:41
君威怎麼連手機app 瀏覽:630
證書被加密 瀏覽:655
下大封城命令 瀏覽:494
哪個APP可以看歐洲籃球 瀏覽:421
phpsession重復 瀏覽:252
php多條件判斷語句 瀏覽:381
伺服器uhd是什麼東西 瀏覽:996
解壓泡泡紙的雙人玩法 瀏覽:607
linux下顯示亂碼 瀏覽:883