最近參加了乙個專案,因為是做c的,原本以為是使用gcc和gdb來作為編譯和除錯的工具。結果未曾想,開發環境上居然只允許使用cc編譯器,沒用過啊。。引數都不知道,沒辦法,查資料。。啥文的都有,可是苦了俺了。自己忘性大,還是做下紀錄,以備後查。
cc編譯器:
開發除錯常用引數:
-g 輸出帶有除錯資訊的編譯結果
-c 編譯檔案,但是不做連線(link)操作,預設生成與.c檔案同名的.o檔案
-l 指定要是用的lib名稱,如libsocket.so則為 -lsocket
-i 指定要去尋找include標頭檔案的路徑,可以複數指定。
-g 用來指定生成共享庫檔案
-o 用來指定生成的檔名
-m64 sun studio 12開始使用的引數,代替-xarch=v9。通常與-xarch=sparc一起使用
-xcode=[v] 指定程式的abi空間位址的生成方式。在做成shared library時須指定,sun預設為-xcode=abs44,不能用這個引數來生成64位shared library。
參照資料:
例:cc -g -c a.c -lsocket -lnsl
cc -g b.c -o b.so ./a.o
cc -g a.c -i../include/
dbx除錯用工具:
dbx 待除錯可執行檔案
(dbx) 命令列
print 列印指定變數或者表示式的值
run 執行程式
runargs 指定程式執行的引數。例如命令列上要用 ./prog 10 20作為啟動命令的話,則使用(dbx) runargs 10 20進行啟動
watch 監視某個變數的值,在每次stop後會自動顯示出來
stop at 用於指定斷點,主要是某行的斷點。比如 stop at a.c:30 的含義是停止於a.c程式的第30行
stop in 用於指定斷點,主要是針對函式名稱。比如 stop in dosum 的含義是一旦dosum方法被呼叫,則停止
step 步進
step up 完成當前函式,並且停止到呼叫函式的下一行。
cont 繼續執行。(continue)
check 指定rtc檢查內容
-all 指定為全部
-leaks 指定為記憶體洩漏,訪問異常等
-memuse 指定為監視記憶體使用
showleaks 顯示記憶體洩漏等異常資訊
showmemuse 顯示記憶體的使用量
用rtc來進行除錯等操作時,可以在dbx的幫助下,看到是否有記憶體沒有宣告就被訪問,是否有越界訪問等等資訊。
linux上的C C 編譯器和偵錯程式
gnu 的偵錯程式稱為 gdb,該程式是乙個互動式工具,工作在字元模式。在 x window 系統中,有乙個 gdb 的 前端圖形工具,稱為 xxgdb。gdb 是功能強大的除錯程式,可完成如下的除錯任務 設定斷點 監視程式變數的值 程式的單步執行 修改變數的值。在可以使用 gdb 除錯程式之前,必...
主題 C C 編譯器的選用
乙個c 編譯器的不完全列表 2008年11月18日更新 我 bjarne stroustruphttp www.research.att.com bs homepage.html 常常被提問建議的c 編譯器,但是我不做建議,因為那樣看起來很像站在商戰的某一邊。況且,我並不了解每乙個c 編譯器,僅僅知...
c c 中的編譯器命令
在一般的.h標頭檔案中,主要包含以下內容 1.巨集定義,如 ifndef mpeg4format h define mpeg4format h endif 其作用是當此標頭檔案被很多.c c.pp包含時,避免其中定義的全域性變數,被重複定義.ifdefine xx condition endif 其...