非常に複雑なC++関数をデバッグしているので、入力によっては予期しない結果が出ます。さまざまな入力の下でコードの実行を比較したいので、どの部分がバグの原因になっているのかを知ることができます。コード実行パスを比較できるツールが私が探しているツールです。そのようなツールが存在するかどうか教えてください。そうでなければ、私は同じことをするために採用することができるいくつかのテクニックがありますか?異なるコードで同じコードの実行パスを比較する
私の問題を具体的に説明するために、ここではわかりやすい例を使用しています。
は
double payTax(double income)
{
if (income < 10000)
return noTax();
else if (10000 < income < 30000)
return levelOneTax();
else if (30000 < income < 48000)
return levelTwoTax();
else
return levelThreeAboveTax();
}
与えられた入力15000は、機能は税の正確な量を計算し、何とか入力16000が誤った税額を与え、これは擬似コード内の関数であると言います。おそらく、入力15000と16000は関数がまったく同じ実行パスを通過するようにします。一方で、もし彼らが別の道を行くなら、何かが関数内で間違っていたはずです。したがって、実行パスを比較するツールでは、バグをすばやく特定するのに役立つ情報が十分に表示されます。私はそのようなツールを探しています。好ましくはVisual Studio 2010と互換性があります。このようなツールでも変数の値が保持されていると良いでしょう。
P.S.デバッグは私がやりたい最後のものです。なぜなら、私が扱っているコードベースは、簡単なpayTaxの例よりはるかに大きくて複雑なものだからです。
助けてください。ありがとう。
Visual Studio 2010を起動して実行していますか?もしそうなら、関数 'payTax()'の先頭にブレークポイントを置いてデバッガでプログラムを実行しようとしましたか? –
はい。私が言ったように、実際の機能は、考案されたexmpleよりも何千も複雑です。私はデバッガを使用することができましたが、私にこのようなツールがある場合よりもはるかに時間がかかります。@Dan Nissenbaum – Shuo
詳しい説明がなくても良い答えが得にくいですが、デバッガは単なる基本的なブレークポイントやシングルステッピング以上のことをしています。条件付きブレークポイントを使用して、実行が所定の事前条件で予期しないどこかで終了した場合にトレースすることができます。あなたの例では、ブレークポイントは与えられた入力範囲でのみ起動できます。 – JasonD