常用除錯工具gdb,dbx,valgrind介紹一

2021-06-16 18:07:43 字數 1529 閱讀 7113

類unix下c/c++開發,**除錯比較麻煩,最原始的加跟蹤除錯很土,也很費時,特別是乙個龐大的專案,**行數非常大的時候除錯起來非常費勁,當core dump時定位也不容易,這裡介紹幾個常用工具: gdb、dbx除錯工具,valgrind記憶體檢查工具(linux) 。

gdb(gnu debugger)是gnu的偵錯程式,一般和gcc配搭使用。要使用gdb進行除錯,編譯程式時要指定-g或-ggdb的編譯選項。如: gcc –g main.c  

gdb指令:f(file):指定可執行檔案,l(list)列出原始檔,r(run)執行可執行檔案,可帶執行引數,b(break)設定斷點c(continue)繼續被中斷程式執行,直到下乙個斷點或者程式結束p(print)輸出變數的值,如p aa;n(next)單步執行s(step)程式執行到斷點時中斷執行,可以用s指令進行單步執行進入某一函式。q(quit)退出

當在gdb執行時想執行shell命令,不必退出,執行shell切換到shell模式,執行shell命令

gdb有能力在你除錯程式的時候處理任何一種訊號,你可以告訴gdb需要處理哪一種訊號。你可以要求gdb收到你所指定的訊號時,馬上停住正在執行的程式,以供你進行除錯。你可以用gdb的handle命令來完成這一功能。handle

在gdb中定義乙個訊號處理。訊號可以以sig開頭或不以sig開頭,可以用定義乙個要處理訊號的範圍(如:sigio-sigkill,表示處理從sigio訊號到sigkill的訊號,其中包括sigio,sigiot,sigkill三個訊號),也可以使用關鍵字all來標明要處理所有的訊號。一旦被除錯的程式接收到訊號,執行程式馬上會被gdb停住,以供除錯。其可以是以下幾種關鍵字的乙個或多個。 nostop 不停止執行,只輸出顯示訊號,stop:停住程式,print顯示一條資訊,noprint當被除錯的程式收到訊號時,gdb不會告訴你收到訊號的資訊,noignore當被除錯的程式收到訊號時,gdb不處理訊號。這表示,gdb會把這個訊號交給被除錯程式會處理。nopass,ignore當被除錯的程式收到訊號時,gdb不會讓被除錯程式來處理這個訊號。

檢視core檔案:執行gdb 執行檔案 core檔案來載入core檔案,使用where來檢視coredump位置。如果系統未產生core檔案,可使用ulimit -c 2048命令,後執行執行檔案產生。

多程序除錯:在我們的測試程式在父程序fork後,子程序呼叫sleep睡了60秒。這就是關鍵,這個sleep本來是不該存在於子程序**中的,而是為了使用gdb除錯後加入的,為什麼要讓子程序剛剛執行就開始sleep呢?因為我們要在子程序睡眠期間,利用shell命令獲取其process id,然後再利用gdb除錯外部程序的方法attach到該process id上,除錯該程序。

動態庫除錯,執行執行程式載入動態庫來除錯。

常用串列埠除錯工具比較

目前有許多免費的串列埠除錯工具,比較常用的有 1 友善串列埠除錯助手 v3.9.1 優點 1 使用方便,不丟包 2 串列埠自動識別,支援com9以上串列埠 3 支援多串列埠除錯 4 支援歷史傳送記錄 個人比較喜歡的乙個。2 串列埠除錯助手 v2.2 優點 使用方便,使用者群最多,有書介紹及免費源 缺...

常用串列埠除錯工具比較

在pc機上,目前有許多免費的串列埠除錯工具,比較常用的有 1 串列埠除錯助手 v2.2 優點 使用方便,使用者群最多,有書介紹及免費源 缺點 1 因採用多執行緒接收技術,接收有時丟數,特別在高波特率或使用usb轉串列埠時丟數較多。2 最大只支援115.2k波特率。3 只能選com1 com2,使用u...

除錯工具 之Python除錯工具pycharm

1 pycharm的安裝 pycharm是一款非常好用的python ide,提供專業版和社群版,就像eclipse和myeclipse一樣,專業版是收費的,而社群版是免費的但功能就沒有專業版的功能強大。1.2 安裝 這裡就不必細說,直接next就ok ps 安裝完成後一定要執行 1.3 破解 採用...