0

system-C に、いくつかのデータ メンバーを持つクラスがあります。

long double x[8];

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

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

しかし、コードで初めて使用すると、そこにゴミがあります。

システムの構築方法が原因で、デバッガーを簡単に接続できません。コードにデータブレークポイントを設定して、変数が実際に変更されたコードの場所をデバッガーを接続せずに教えてくれる方法はありますか?

編集:@Prakash:実際、これは質問のタイプミスですが、私のコードではありません...ありがとう!

4

6 に答える 6

0

@フランク

実際、これにより、デバッグ出力をファイルに記録できます。私が探しているのは、変数を明示的に探すことなく、変数が変更されるたびに何かを出力できるものです。

于 2008-09-11T12:47:14.103 に答える
0

回転する2番目のスレッドを開始して、変数の変更を探すことができます。


#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シグナルが発生します。

于 2008-09-30T18:27:21.453 に答える
0

もちろんゴミになります!

コードは次のようになっているはずです

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

編集:おっと、過小評価して申し訳ありません;)

于 2008-09-11T11:49:09.873 に答える
0

printk/syslogを使用してください。

それは昔ながらですが、非常に簡単です。

于 2008-09-11T11:52:34.343 に答える
0

条件付きブレークポイントはどうですか? 最初の要素の値がゼロまたはゼロでないなど、さまざまな条件を試すことができますか??

于 2008-09-11T12:58:32.267 に答える
0

これは、デバッガーを簡単に接続できることを前提としています。全体的なポイントは、私はライブラリしか持っていないということですが、それをリンクした実行可能ファイルはすぐには利用できません。

于 2008-09-11T13:07:58.797 に答える