2011-06-17 12 views
1

私はgdbを使っていくつかのC++コードをデバッグしています。現時点で私が見ているコードは、オブジェクトのポインタかNULLポインタのいずれかのポインタの配列を反復します。gdbの条件付き表示

もし私がちょうどdisplay list[index]->memberであれば、list [index]がnullの時に文句を言うでしょう。 list [index]がnullでない場合に限り、メンバを表示する方法はありますか?私はあなたが条件付きブレークポイント(condition <bp-num> <exp>)を設定できることを知っていますが、私はそれがどのように役立つか分かりません。

問題のコードは次のとおりです。

VMSは、ポインタの配列である
for (int i=0;i<BSIZE*BSIZE;i++){ 
    if (vms[i]==target) {valid=true; break;} 
} 

+0

ありがとうございました! 'if'行にブレークポイントを設定し、それを取得し、vms [i]!= NULLまでステップし、ブレークポイント(BP1と言う)を 'condition 1 vms [i]!= NULL'に設定して安全にオンにします'vms [i] - > member'を表示してから、続けてください。 もっと良い解決策を! – Samizdis

答えて

2

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; 
     } 
} 

あなたはこのようにそれをデバッグすることができます:displayは任意の式を受け付けているので、あなたは以下のdisplayのコマンドのようなものを試すことができ

(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; 
関連する問題