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

2021-07-03 03:19:23 字數 1152 閱讀 5308

只有符合某種條件時才在斷點處停止。類似於監視點的工作方式,每當該變數的值發生變化時,監視點都會中斷。條件斷點只會在懷疑有問題的**處當變數呈現該懷疑值時才中斷。

設定條件斷點:breakbreak-args if (conditon)如:break if (i==700) condition 6999

條件可以是:

1、         相等、邏輯和不想等運算子(<,<=,==,!=、,>,>=,&&,||等)如break 180 if string == null && i < 0

2、         按位和以為運算子等(&,|,^,>>,《等)如break test.c:34 if(x & y) == 1

3、         算術運算(+,-,*,/,%)如break myfunc if i % (j + 3) != 0

自己寫的函式、或庫函式經過鏈結之後都可以呼叫,比如在這種環境中,可以用if strlen(mystring) == 0等作為判斷,自己寫的函式也是乙個道理。

正常斷點是無條件操作,而條件斷點是有條件操作,條件達到之後才能暫停。

使用commands命令設定命令列表:

commandsbreakpoint-number ……

commands ……

end例如:

$gdb fibonacci

break fibonacci

commands 1

printf  「fibonacciwas passed %d.\n」, n

end如果覺得輸出太冗餘,可以使用silent命令,它需要在命令列表的第乙個輸入,使用gdb更安靜地觸發斷點。 如:

command 1

silent

printf 「…….」

end如果命令列表中的最後乙個命令是continue。gdb將在完成命令列表中的命令後繼續自動執行程式。

如果你的這些命令還會在其它程式中使用,那麼你可以使用gdb中的define命令建立巨集。

建立巨集print-and-go:

define print-and-go=> 長久儲存則將其放在.gdbinit檔案中。

printf $arg0,arg1

continue

end這裡如果要給它傳送引數,則引數之間沒有任何的符號。檢視巨集使用show user命令,可以得到所有的巨集列表。

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

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

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

監視點是指示gdb每當某個表示式改變了只,就暫停執行指令。如watch i它會使得每當i改變值時gdb就暫停。也可以使得watch後面的更複雜如 watch i j 2 i 24 strlen name 6這是將監視點看作 附加 在表示式上,當表示式的值改變時,gdb會暫停程式的執行。斷點與源 中的...

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

在gdb中,可以通過呼叫info locals命令得到當前桟幀中的所有區域性變數的值的列表。在有些情況下,可能希望檢查給定位址的記憶體,而不是通過變數的名稱。gdb為這種目的提供x命令。print和display的高階選項,print和display命令允許指定可選的格式。例如p x y,這樣會以十...