我正在調試一個非常複雜的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()'的開頭放置一個斷點,然後在調試器中運行程序? –
是的。正如我所說的,真正的功能比設計的實例要複雜上千倍。我可以使用調試器,但如果我有這樣一個工具,它會花費我更多的時間。@Dan Nissenbaum – Shuo
如果沒有完整的細節,給出一個很好的答案是非常棘手的,但是調試器不僅僅是基本的斷點和單步執行。您可以使用條件斷點來追蹤執行何時以給定的前提條件結束於意外的地方。對於你的例子,斷點只能在給定的輸入範圍內觸發。 – JasonD