可以使用gdb、strace命令(推薦gdb),本文主要介紹使用gdb在linux下直接對程序進行跟蹤除錯
若想使用gdb對程序除錯,需要在編譯程式時加入相關的選項
set(cmake_build_type "debug")
set(cmake_cxx_flags_debug "$env -o0 -wall -g2 -ggdb")
set(cmake_cxx_flags_release "$env -o3 -wall")
參考:舉例說明:
gcc -g test.c -o test(-g選項告訴gcc在編譯程式時加入除錯資訊,-o指定輸出程式名稱)
參考:gdb ./fftranscode //啟動並除錯
(gdb)set args ********* //設定引數
s / start #開始除錯,停在第一行**處,(gdb)start
l [file name:line number] / list [file name:line number] #list的縮寫檢視源**,(gdb) l [number/function]
b #b: breakpoint的簡寫,設定斷點。(gdb) b 10
b #b: breakpoint的簡寫,設定斷點。(gdb) b main
b filename:[line/function] #b:在檔案filename的某行或某個函式處設定斷點
i b / i breakpoints / info break #檢視所有斷點,i:info 的簡寫。(gdb)i breakpoints
d [breakpoint number] / delete [breakpoint number]
#d: delete breakpoint的簡寫,刪除指定編號的某個斷點,或刪除所有斷點。斷點編號從1開始遞增。 (gdb)d 1
s #s: step執行一行源程式**,如果此行**中有函式呼叫,則進入該函式;(gdb) s
n #n: next執行一行源程式**,此行**中的函式呼叫也一併執行。(gdb) n
c #continue的簡寫,繼續執行被除錯程式,直至下乙個斷點或程式結束。(gdb) c
r #run的簡寫,執行被除錯的程式。如果此前沒有下過斷點,則執行完整個程式;如果有斷點,則程式暫停在第乙個可用斷點處。(gdb) r
finish #函式結束
p [var] #print的簡寫,顯示指定變數(臨時變數或全域性變數 例如 int a)的值。(gdb) p a
display [var] #display,設定想要跟蹤的變數(例如 int a)。(gdb) display a
undisplay [varnum] #undisplay取消對變數的跟蹤,被跟蹤變數用整型數標識。(gdb) undisplay 1
set args #可指定執行時引數。(gdb)set args 10 20
show args #檢視執行時引數。
q #quit的簡寫,退出gdb除錯環境。(gdb) q
help [cmd] #gdb幫助命令,提供對gdb名種命令的解釋說明。如果指定了「命令名稱」引數,則顯示該命令的詳細說明;如果沒有指定引數,則分類顯示所有gdb命令,供使用者進一步瀏覽和查詢。(gdb)help
回車 #重複前面的命令,(gdb)回車
參考文章:
bt / backtrace #檢視當前呼叫堆疊
focus / layout #檢視當前指定的**
參考:
gdb 跟蹤除錯
要進行除錯程式首先要生成乙個含有除錯資訊的執行程式命令如下 此時便會生成乙個含有除錯資訊的可執行檔案,然後便可以用 gdb 去除錯這個程式了,進入除錯程式命令,但是如果用 gdb 去除錯乙個未包含除錯資訊的可執行檔案則會發生錯誤 執行 gdb gdb 啟動常用的引數 從指定檔案中讀取符號表資訊,並把...
linux下gdb的除錯使用
1.gdb除錯的物件是可執行檔案,而不是程式的源 因此在使用gcc編譯器時 需加 g選項。告訴gcc編譯器加入除錯資訊。例如 gcc g test.c o test 2.除錯gdb的格式是 例如 gdb test 3.在啟動gdb後,會顯示一段版權說明,如果要不顯示 加入 q即可 例如 gdb q ...
linux下如何使用gdb除錯
gdb是linux下非常好用的乙個除錯工具,雖然它是命令列模式的除錯工具,但是它的功能強大到你無法想象,這裡簡單介紹下gdb下常用的命令。首先編譯生成可執行檔案 這裡的test.c是乙個簡單的求前n項和的程式 gcc g test.c o test g選項告訴gcc在編譯程式時加入除錯資訊 接下來可...