**:
1.使用g++編譯cpp檔案如果用gcc編譯c++原始檔時,加以下選項:-lstdc++,否則使用了c++操作的檔案編譯會出錯。
2.gcc/g++ 在執行編譯時,需要4步
① 預處理,生成.i的檔案[使用-e引數]
② 將預處理後的檔案把轉換成組合語言,生成檔案.s[使用-s引數]
③ 由彙編變為目標**(機器**)生成.o的檔案[使用-c引數]
④ 連線目標**,生成可執行程式[使用-o引數]
1.gdb的除錯命令列表.
命令解釋
簡寫file
裝入想要除錯的可執行檔案
無list
列出產生執行檔案源**的一部分
lnext
執行一行源**但不進入函式內部
nstep
執行一行源**而且進入函式內部
srun
執行當前被除錯的程式
rcontinue
繼續執行程式
cquit
終止gdb
qprint
輸出當前制定變數的值
pbreak
在**裡設定斷點
binfo break
檢視設定斷點的資訊
ibdelete
刪除設定的斷點
dwatch
監視乙個變數的值,一旦值有變化,程式停住。
wahelp
gdb的幫助命令
h使用方法:
在編譯程式的時候新增 –g引數,比如:
g++ -g -o hello hello.cpp
在gdb進行除錯的使用再輸入命令gdb+可執行檔名,比如:
gdb hello
檢視原始檔 list 1,回車重複上一次指令
之後就是根據引數列表,按照自己的需求輸入自己的命令。
參考**:
如果要產生core檔案,可以用gdb [程式名] [core檔名]進入後,輸入bt檢視堆疊資訊。可參考:
另外,如果用makefile進行編譯的話,要特別注意使用正規表示式,否則編譯出的檔案將不能用於除錯。
比如makefile1:(執行正常)
executemain : main.o commonfun.o mytool.o
g++ -o executemain main.o commonfun.o mytool.o
main.o : main.cpp commonfun.h mytool.h
g++ -g -c main.cpp
common.o : commonfun.h commonfun.cpp
g++ -g -c commonfun.cpp
mytool.o : mytool.h mytool.cpp
g++ -g -c mytool.cpp
clean :
rm -f executemain main.o commonfun.o mytool.o
而makefile2:
compiler=g++
executemain : main.o commonfun.o mytool.o
$(compiler) -o $@ $^
..c.o :
$(compiler) -g -c $<
clean :
rm -f *.o executemain
會提示出如下的錯誤:
...
reading symbols
from
/*****/
howtousemakefile/executemain...(no debugging symbols found)...done.
編譯優化(-o -o2): 指標優化
**覆蓋(-fprofile-arcs -ftest-coverage): 統計**資訊
-lpthread: 執行緒相關
-lrt: 混合鏈結
-ldl: 靜態鏈結和動態鏈結
-luuid: 唯一識別碼
-lm: math.h函式庫libm.so
-lcrypt: 與ssl加密有關
-wl:告訴編譯器將後面的引數傳遞給鏈結器。
編譯靜態庫或動態庫:
詳情見附件:g++編譯選項對應表。
附件1:g++編譯選項對應表:
gcc/g++
命令的常用選項格式(選項 解釋)
-o file
指定輸出檔名,在編譯為目標**時,這一選項不是必須的。如果file沒有指定,預設檔名是a.out.
-c只編譯生成目標檔案,不鏈結
-m486
針對 486 進行**優化。
-o0不進行優化處理。
-o 或 -o1
優化生成**。
-o2進一步優化。
-o3比 -o2 更進一步優化,包括 inline 函式。
-w關閉所有警告,建議不要使用此項
-wall
允許發出gcc能提供的所有有用的警告,也可以用-w(warning)來標記指定的警告
-werror
把所有警告轉換為錯誤,以在警告發生時中止編譯過程
-mm輸出乙個make相容的相關列表
-v顯示在編譯過程的每一步中用到的命令
-e只執行 c 預編譯器。
-shared
生成共享目標檔案。通常用在建立共享庫時。
-static
鏈結靜態庫,即執行靜態鏈結
-lfoo
鏈結名為libfoo的函式庫
-g在可執行程式中包含標準除錯資訊
-ggdb
在可執行程式中包含只有gnu debugger才能使別的達兩條是資訊
-o優化編譯過的**
-on指定**優化的級別為n,o<=n<=3
-ansi
-pedantic
允許發出ansi/iso c標準所列出的所有警告
-errors
允許發出ansi/iso c標準所列出的所有錯誤
-traditional
支援kernighan & ritchie c語法(如用舊式語法定義函式);如果不知道這個選項的含義,也沒有關係
-idirectory
指定額外的標頭檔案搜尋路徑directory。
-ldirectory
指定額外的函式庫搜尋路徑directory。
-dfoo=bar
在命令列定義預處理巨集foo,其值為bar
-idirname
將dirname加入到頭檔案的搜尋目錄列表中
-ldirname
將dirname加入到庫檔案的搜尋目錄列表中,預設情況下gcc 只鏈結共享庫
-dmacro
以字串「1」定義 macro 巨集。
-dmacro=defn
以字串「defn」定義 macro 巨集。
-umacro
取消對 macro 巨集的定義。
分類: 開發
3 GDB程式除錯及Coredum
gdb是gnu發布的一款功能強大的程式除錯工具。gdb主要完成下面三個方面的功能 1 啟動被除錯程式。2 讓被除錯的程式在指定的位置停住。3 當程式被停住時,可以檢查程式狀態 如變數值 1.編譯生成可執行檔案 gcc g tst.c o tst 2.啟動gdb gdb tst 3.在 main函式處...
gdb除錯,交叉編譯除錯
root localhost pwd root root localhost cat gdbinit.bak set solib absolute prefix opt embedsky 4.3.3 arm none linux gnueabi set solib search path opt e...
交叉編譯gdb除錯
編譯環境 ubuntu16.04 64位 交叉編譯工具 arm hisiv500 linux gcc 在開發過程中總會遇到段錯誤之類的問題,交叉編譯gdb方便在開發板上除錯,這裡記錄一下編譯流程。2.開發板上gdb除錯流程 cd work mkdir gdb.install tar zxf term...