2008-09-11 9 views
0

私のようないくつかのデータメンバーとシステム-Cでクラスを持っている:System C(またはPlain Vanilla C++)で実行時にデータブレークポイントを設定することはできますか?

long double x[8]; 

私はこのような構造では、それを初期化しています:

for (i = 0; i < 8; ++i) { 
    x[i] = 0; 
} 

しかし、私はそれを初めて使用するとき私のコード私はそこにごみがあります。

システムの構築方法のため、デバッガを簡単に接続できません。コード内にデータブレークポイントを設定する方法はありますか?それで、コード内で変数が実際にどこで変更されたのか、デバッガには接続されません。

編集: @Prakash: 実は、これは問題のタイプミスではなく、私のコードで...ありがとう!

答えて

0

あなたは、変数の変化を探して、スピン二のスレッドを起動してみてください:


#include <pthread.h> 

void *ThreadProc(void *arg) 
{ 
    volatile long double *x = (volatile long double *)arg; 
    while(1) 
    { 
    for(int i = 0; i < 8; i++) 
    { 
     if(x[i] != 0) 
     { 
     __asm__ __volatile__ ("int 3"); // breakpoint (x86) 
     } 
    } 

    return 0; // Never reached, but placate the compiler 
} 
... 
pthread_t threadID; 
pthread_create(&threadID, NULL, ThreadProc, &x[0]); 

xの値のいずれかがゼロでない場合、この状況は、アプリケーションにSIGTRAP信号を発生させます。

0

もちろん、ごみになります!

コードが

for (i = 0; i < 8; ++i) { 
    x[i] = 0; 
} 

EDITとされている必要があります:おっと、過小評価のため申し訳ありません;)

0

ちょうどprintk/syslogを使用しています。

これは昔ながらのものですが、とても簡単です。 @Frank

0

は実際に、それは私がファイルにデバッグプリントをログに記録することができます。私が探しているのは、明示的に変数を探すことなく、変数が変わるたびに何かを印刷させるものです。

0

Conditional breakpoints?最初の要素の値がゼロまたはゼロ以外のようなさまざまな条件を試すことができますか?

0

これは、私が簡単にデバッガに接続できると仮定しています。要点は、私はライブラリしか持っていないが、リンクされた実行可能ファイルはすぐに利用できないということです。

関連する問題