VC2003.netで質問です。
変数=-1.#IND000000000000で条件していして
ブレイクポイントを設定したいのにできません。
変数=1なら出来ます。
どうやったら出来るのでしょうか?
多分、むりなんじゃないの?
指定の仕方が違うとか?
「1.#IND000000000000」は、設定できない値です。
デバックモード時に値がおかしい「オーバフロー」している時に
表示される値です。
レスありがとうございます。
>>「1.#IND000000000000」は、設定できない値です。
>>デバックモード時に値がおかしい「オーバフロー」している時に
>>表示される値です。
そのオーバーフローしたときにブレイクしたいのですが可能ですか?
try-catch文か、Assert文などチェックできたかと思いましたが......
どこで1.#IND000000000000になってるかわからないので
try-catchとか仕掛けることができません。
どうにかデバッグ機能で条件でブレイクとかできないでしょうか?
どんな計算をしているのか、どこで「1.#IND000000000000」の値になるのを
ナノさんが気づくのか分らないと答えようがないです。
__int64型にmemcpyしての判定は?
VC7.1でやってみた。
for (int i = 0; i < 10; i++) {
double a = 10;
double b = i - 3;
double c = a / b;
__int64 d;
memcpy(&d, &c, sizeof(c));
if (d == 0x7ff0000000000000) {
cout << error at i == << i << endl;
break;
}
cout << i << : << c << endl;
}
環境依存だと思うが一応成功。
> どうにかデバッグ機能で
どうも、ソースをいじりたくないというのが第1にあるような。
> 「1.#IND000000000000」は、設定できない値です。
なのから、ソースいじるしかないんだけど。
>> どうにかデバッグ機能で
>どうも、ソースをいじりたくないというのが第1にあるような。
そうかもしれませんね。
私としては、再現性の低いバグについて、
場所の特定に苦労されているような印象を受けていますが。
それと訂正と補足。
> 変数=-1.#IND000000000000で条件していして
とあるので、0xfff0000000000000でした。
WEBでは以下の定義も見かけましたが、私の環境では定義されていない
ようでした。
#define IEEE_PINF 0x7ff0000000000000
#define IEEE_NINF 0xfff0000000000000
レスありがとうございます。
自分で調べててオーバーフローって
-1.#IND000000000000じゃなくて
1.#INF000000000000と-1.#INF000000000000のようですけど
INDとINFにどういう違いがあるんでしょうか?
ネットでもMSDNでもみつからないし…
皆さんのレスをきちんとよんでいますか。
僕も同意見ですがレスの内容は、
「強制的にデバックモ-ドでブレイクさせて調べるより、
ソ-スを見直して手直しすることによって
エラーを修正したほうがいい。」
という内容です。
どんな計算をしているのか、
ソース上どんな処理で「1.#INF000000000000」
が出るのが分らないと話が先に進みません。
修正します。
「1.#INF000000000000」→「-1.#IND000000000000」
ちゃんと読んでないのはあなたでしょ?
どこかわからないっていってるんですよ
ソースを全部張らないとだめですか?無理です。
こっちの質問理解してます?
出来ないなら出来ないと回答くれればいいんです。
もう無理そうなんで別のとこで聞いてみます。
ここでは閉めさせていただきます。
回答者のみなさん。ありがとうございました。