【发布时间】:2012-12-09 19:33:24
【问题描述】:
我正在调试一个非常复杂的 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兼容。如果这样的工具还保留变量的值会更好。
附:调试是我最不想做的事情,因为我正在使用的代码库比简单的 payTax 示例要大得多且复杂得多。
请帮忙。谢谢。
【问题讨论】:
-
您是否已启动并运行 Visual Studio 2010?如果是这样,您是否尝试在函数
payTax()的开头放置断点,然后在调试器中运行程序? -
是的。正如我所说,真正的功能比人为的例子复杂一千倍。我可以使用调试器,但与拥有这样的工具相比,它会花费我更多的时间。 @丹尼森鲍姆
-
如果没有完整的细节,很难给出一个好的答案,但调试器所做的不仅仅是基本的断点和单步执行。您可以使用条件断点来跟踪执行何时以给定的前提条件意外结束。对于您的示例,断点只能在给定的输入范围内触发。
-
@Shuo 我也一直在寻找这样的工具(虽然适用于.NET/C#),会发现它最有帮助!你有没有找到任何工具或替代解决方案?