【发布时间】:2012-05-30 20:32:36
【问题描述】:
我正在使用visual c 2008 和visual c 2010 构建一个相当复杂的算法。当我在VC 2010 中启用优化(特别是/Og)进行编译时,该算法会产生错误的输出。
在 VC 2008(优化或不优化)或不优化的 VC2010 中构建完全相同的代码会生成行为正确的算法。
我很难在启用优化的情况下调试代码,并且已经坚持了很长一段时间。有谁知道不同版本的优化有什么不同吗?
【问题讨论】:
-
这通常发生在您调用未定义的行为时。即使使用另一个编译器“它可以工作”,你也很可能做错了什么。
-
生成的代码是不是很慢,还是产生了错误的结果?您的措辞并不完全清楚,引起未定义行为注意的新优化并非闻所未闻。
-
您可能希望通过 Windows 世界中的任何 valgrind 等价物来运行您的程序。
-
它会产生错误的结果。该代码适用于许多其他平台,包括 DSP 和 ARMS。
-
调试不仅仅意味着使用调试器单步执行代码。添加 printfs,添加断言,在代码中进行检查以仔细检查您的假设。在代码中创建统计数据,然后在最后或在不同点转储。在代码中放置探针以验证每个步骤/功能/块/迭代/等。逐渐缩小范围,以便找到发生错误的点。编译器通常经过良好测试,可以为数十亿行代码生成正确的代码。几乎总是您的代码出错,而不是编译器。
标签: c visual-studio visual-c++ optimization compiler-optimization