同じ入力に対して異なる出力を生成することがあるC++バイナリ(GNU LilyPond)があります。バイナリをvalgrindingしても、このファズが発生した場所を追跡したり、gprofデータを読み取ったりすることはできません。非常に便利なのは、同じ入力で同じプログラムの複数の実行を比較し、引数の相違と関数の戻り値(および、関数が呼び出された回数や呼び出された関数)を識別するプロファイリングツールです。いつ)。複数のプログラム実行間の一種のインテリジェントな「差分」ファイル。デバッグデータが多すぎて手作業でこれを見つけることができないため、ある種の合成ツールが非常に役立ちます。この種のタスクを実行できるツールを知っている人はいますか?
1 に答える
0
私が知っている最も近いものはコード カバレッジのようなツールですが、提案を行うほど最近は使用していません。
ただし、いくつかの推測を行うことができる場合があります。最も可能性の高い候補は、未定義の動作、初期化されていないメモリ、およびおそらく浮動小数点演算です。
可能な限り多くの警告を有効にすると、原因がたまたま前に侵入した UB のいくつかの形式を検出できる可能性があります。
そうしないと、さまざまな時点でプログラムの状態をダンプし、各チェックポイントを比較して相違が発生した場所を確認する必要がある時点で行き詰まると思います。
于 2012-09-13T14:24:02.847 に答える