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

2021-09-07 11:50:58 字數 1960 閱讀 7901

對執行緒的除錯用的最多的可能是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 條件可以...