2011-06-17 51 views
1

我使用gdb來調試一些C++代碼。目前我正在查看的代碼遍歷一個指針數組,它是指向某個對象的指針或NULL指針。gdb中的條件顯示

如果我只是display list[index]->member它會在列表[index]爲空時發生抱怨。無論如何只有在list [index]不爲空時才顯示成員?我知道你可以設置條件斷點(condition <bp-num> <exp>),但我不確定這會有什麼幫助。

的代碼中的問題是:

for (int i=0;i<BSIZE*BSIZE;i++){ 
    if (vms[i]==target) {valid=true; break;} 
} 

其中虛擬機是指針數組。

+0

Got it! 在'if'行設置一個斷點,到達它,直到vms [i]!= NULL,將斷點(稱爲BP1)設置爲'condition 1 vms [i]!= NULL'並安全地打開'display vms [i] - > member',然後繼續點擊繼續:) 更好的解決方案歡迎! – Samizdis

回答

2

由於display接受任意表達式,你可以嘗試類似如下display命令:

display (list[index]) ? list[index]->member : "null" 

我不確定這是否能夠清理所需內容 - 您仍然可以看到展示內容,但不會是投訴。

+0

完美,謝謝! – Samizdis

0

基本情況是這樣的:

#include <iostream> 

int main() { 
     for (int i=0; i<10; ++i) { 
       std::cerr << i << std::endl; 
     } 
} 

可以調試這樣說:

(gdb) break 5 
Breakpoint 1 at 0x100000d0e: file foobar.cpp, line 5. 
(gdb) condition 1 i==3 
(gdb) r 
Starting program: /private/tmp/foobar 
Reading symbols for shared libraries ++. done 
0 
1 
2 

Breakpoint 1, main() at foobar.cpp:5 
5   std::cerr << i << std::endl;