《軟體除錯藝術》讀後感七

2021-07-03 03:36:25 字數 1889 閱讀 6876

對執行緒的除錯用的最多的可能是thread命令了,檢視程式中有多少執行緒使用infothreads,進入到某個執行緒的內部使用thread count,這樣就可以進入到count執行緒的內部。執行緒除錯中用的最多的還有就是bt命令,這個命令主要是檢視執行緒的桟資訊,光看桟資訊還是差了點什麼,那就是使用frame count命令,這個命令可以在桟幀之間移動,如果要檢視這個桟的源**就用到之前我們使用的list。在frame中使用的多的還有up和down命令,可以順序切換桟的frame。

gdb能夠使用程序號或者是執行緒號動態的將偵錯程式附加到已經執行的程序上,用ps命令來確定系統上現在執行的程式。

對執行緒下斷點、監視點等都和前面的程序一樣,沒有任何區別,只是如果執行緒出錯,每個執行緒裡面都會有乙個拷貝的errno變數記錄了執行緒的錯誤。

perror函式接受乙個引數,且沒有返回值,它輸出字串,後面跟乙個冒號和空格。

strerroràchar *strerror(int errno)以errno做為引數,並返回乙個描述錯誤的字串。

strace實用程式輸出程式進行的各個系統呼叫及其引數和返回值-o logfile輸出到檔案,或-s n選項截斷為n個字元。多執行緒中使用-o log –ff切換,將單個子程序的strace輸出捕獲到乙個名為log.***的檔案中,其中***是程序id。

ltrace顯示庫呼叫,而不是系統呼叫。

ldd命令可以檢視可執行程式需要的庫檔案。

除錯gui,啟動gdb,這次不同之處在於告訴gdb程式在不同中斷視窗中執行,而不是gdb在執行的那個視窗,在視窗中執行tty命令確定視窗的id號,所以(gdb) tty/dev/pts/x,現在該程式的所有鍵盤輸入和螢幕輸出都將在執行視窗,這時可以在執行視窗中執行類似一下功能的命令sleep ***x,其中***x是睡眠,不接收輸入。這樣在該視窗中的鍵盤輸入會進入程式,而不是shell命令視窗。

或者使用另一種方法,讓程式先執行,開啟另乙個視窗執行gdb,然後附加上這個執行的程式。

使用splint對程式靜態檢查,可以對程式包括返回值在內的檢查,使用之前先進行安裝,debian系統用apt-get install,如果不記得程式的名稱,可以使用apt-cache search搜尋後再安裝。如果是紅帽系列應該使用yum命令查詢並安裝。該程式提供了幾種不同的檢查功能,嚴格控制程度不同分別有standard預設選項,checks是中度檢查,strict是高度嚴格檢查。如果使用某個功能使用+,不使用某個功能使用-。例如splint +weak *.c。

put.c

#include int main(void)

使用splint檢測,預設的話會提示你scanf有返回值,你沒有接收,如果使用+weak之後就不會提醒。

該軟體所提供的功能是記憶體方面的檢查,可以是越界,重複釋放,訪問錯誤,記憶體洩漏等。記憶體越界檢查在gcc中也提供了這個功能,只是gcc中是以巨集的形式表現出來的。編寫程式的時候有時會把訪問陣列的個數弄錯,導致越界訪問,越界訪問並不一定表現出任何錯誤。這也是最可怕的,所以使用該軟體聯合編譯會檢查你的程式,陣列有沒有越界,如果越界,編譯執行會出現段錯誤並列印出錯誤的地方。例如:gcc –g3 –wall –std=c99 outofband.c –o outofband  –lefence,efence預設只捕獲越出動態分配區域最右乙個元素的讀或寫。

outofbound.c

#include #include #include int main(void)

free(a);

return 0;

}

k查詢man頁中的函式,在程式中直接使用k檢視。

gd和gd查詢變數宣告。

[^d和]^d跳到巨集定義。

]d,[d,[d,]d顯示巨集定義。

《除錯軟體藝術》的讀書筆記到此也就完成了,希望大家能夠從中得到你想知道的除錯技巧。如果有任何錯誤,希望大家指正。謝謝

《軟體除錯藝術》讀後感七

對執行緒的除錯用的最多的可能是thread命令了,檢視程式中有多少執行緒使用infothreads。進入到某個執行緒的內部使用thread count。這樣就能夠進入到count執行緒的內部。執行緒除錯中用的最多的還有就是bt命令。這個命令主要是檢視執行緒的桟資訊,光看桟資訊還是差了點什麼。那就是使...

《軟體除錯藝術》讀後感三

在談這個問題前我們有沒有遇到過這樣的場景,每次要修改一次 然後make,之後gdb除錯,然後出gdb中quit,再次修改再次make再次gdb進入再次quit一直重複著乙個工作。那有沒有方法可以避免這樣的重複事情呢?畢竟程式設計師對這種重複的步驟很反感。在實際專案中,乙個專案不可能一天就能完成,有時...

《軟體除錯藝術》讀後感四

只有符合某種條件時才在斷點處停止。類似於監視點的工作方式,每當該變數的值發生變化時,監視點都會中斷。條件斷點只會在懷疑有問題的 處當變數呈現該懷疑值時才中斷。設定條件斷點 breakbreak args if conditon 如 break if i 700 condition 6999 條件可以...