2

C で記述されたシミュレーション コードが NaN を生成する正確な位置を見つける方法を見つけようとしています。私はプレーンな C89 (ただし、C99/C11 に移行できます) と Debian スクイーズで gcc 4.4.5 を使用しています。

どうやら、このチェックを実行できる valgrindのパッチがあるようです。残念ながら、Debian が配布するバイナリには含まれていません。実際、バニラ valgrind と exp-floattrap をコンパイルしようとしても機能しません (最終的な実行可能ファイルには含まれていないようです)。

C ソースのこの種のバグの原因を突き止めましたか?

ご協力いただきありがとうございます。

4

1 に答える 1

2

valgrind は必要ないという理由だけでまったく使用していないことは認めますが、単一の変数が NaN に設定されている場合だけを探している場合は、GDB を使用しないでください (または同様)、次のような変数のウォッチポイントを設定します。

watch var==NaN

これにより、1 つの変数がどの時点で NaN になるか、それが罪悪感のある操作自体ではなく戻り値である場合、関数を罪悪感のチェーンの 1 つ上に移動し、その関数に監視ポイントを設定するなどがわかります。エラーが表示されるまで、など。

これが少し役立つことを願っています:)

于 2012-07-26T18:20:10.020 に答える