只有符合某種條件時才在斷點處停止。類似於監視點的工作方式,每當該變數的值發生變化時,監視點都會中斷。條件斷點只會在懷疑有問題的**處當變數呈現該懷疑值時才中斷。
設定條件斷點: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,這樣會以十...