【发布时间】:2014-11-23 09:25:53
【问题描述】:
很抱歉,如果这个问题已经得到回答,但我没有找到任何相关信息。当调试器错误地命中断点时,我在 Visual Studio 2013 C++ Win32 应用程序中遇到了一个奇怪的问题。这是一个示例代码:
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
int a = 3;
int b = 1;
for (int i = 3; i >= 1; i--)
if (i % 2)
a = a*a;
b++;
return b;
}
我在b++ 行设置断点。我熟悉调试 c# 代码时的调试和断点(并且在 c++ 中非常初学者),根据我的经验,只有在 for 循环结束时才应该命中 b++ 行上的断点。然而,每次循环迭代都会命中,但代码(增量)不会执行。
这是带有相关信息的VS的屏幕截图
【问题讨论】:
-
您是否正在运行发布配置?您的某些行可能已被优化掉并且您的 PDB 中的行号不匹配,这只是一个猜测。出于这个原因,我们经常使用 Noopt 构建,它与 Release 基本相同,但禁用了优化(当然,假设我们不想使用完整的 Debug 配置)。
-
尝试清理并检查您是否有发布版本。
-
1) 不,我正在调试模式下运行。 2) result in locals 是正确的,但是此时断点不应该被命中。
-
我清理了整个解决方案,但没有任何改变,该行上的断点会命中每个循环迭代。当切换到释放模式时——VS 在 return 语句中遇到了不存在的断点。
标签: c++ debugging visual-studio-2013 console-application breakpoints