2009-06-01 9 views
1

私はVisual Studio 2005で大きなプロジェクトの一部をデバッグし、コードを1行ずつ進めています。割り当てが失敗しました

int speed = this->values.speed; 
int ref = this->values.ref_speed; 

最初のラインを越えてステッピング後、values.speed 61の値を有するが、いくつかの理由のために、速度が第2ライン後の値58が割り当てられて取得され、values.ref_speed 58の値を有し、 refには値30が割り当てられます。

一時停止すると、元の値は実際には61と58ですが、保存される値は異なります。

この現象の原因は何ですか?

+2

マルチスレッドアプリケーションですか? – Robert

+0

値のコードを投稿するのはどうですか? – JeffH

+0

はい。その特定の場所は一度しか書き込まれません。 –

答えて

6

これは、値構造体の定義がヘッダーファイルで変更され、すべてのオブジェクトファイルが再コンパイルされていない場合に発生します。次に、このファイルのコードが使用している構造体の「マップ」が、残りのコードと一致しない可能性があります。これは、変数の1つが他の値を持つように見える理由を説明することができます。

何らかの理由でVisual Studio .pdbファイルが更新されず、Visual Studioが変数の古い場所を探しています。

+0

私はあなたのデバッグ情報があなたのプロジェクトと正しく同期していることを確認します。以前のバージョンのデバッグ情報がロードされていたため、値が整列していない前に問題が発生しました。 –

+0

または、構造が2つの異なる場所で2つの異なるものとして定義されている場合。私はそれがどのようにコンパイルされたのか分かりませんが、構造体は2つの場所で2回定義されました。変数の順序は入れ替えられました。 ありがとう! –

0

デバッグモードまたはリリースモードでこれを実行していますか?リリースモードで、または最適化をオンにしている場合、コンパイラはパフォーマンスを向上させるために並べ替えを行っている可能性があり、その結果、変な結果につながる可能性があります。これは、実際の実行で何かが間違っていることを意味するものではありませんが、ステップスルーするのは混乱する可能性があります。

+0

これはデバッグモードで発生します。 –

1

クレイジーです。任意の値を持つthis-> valuesと同じ型のローカル変数を持つ可能性があります(なぜthis->によってメンバーを参照しているのか説明しています)?

+0

ローカル変数がありません。非常に長いshow()ルーチンのローカル変数ではないことを明確にするためにこれを使用しました。 –

関連する問題