发布模式中的断点

时间:2012-02-10 07:01:17

标签: visual-studio-2010

我正在使用(c ++)visual studio 2010。

我必须跟踪我的应用程序的控制流程。所以我在源代码中设置了一个断点

在调试模式下运行应用程序时,断点会命中。但是在realease模式下,它没有击中。

所以请建议一个解决方案来解决发布模式中的断点???

4 个答案:

答案 0 :(得分:16)

我正在使用VS2015。 经过大量失败的解决方案,我找到了一个适合我的方案。 只需取消选中"启用我的代码"在Menu-> Debug-> Options-> Debugging-> General下。 见附图: enable debug in release mode-VS2015

我真的希望这能解决你的问题:)

答案 1 :(得分:8)

在发布模式下,您的代码已经过优化,可以改变程序的流程。例如,如果函数很简单并且只调用一次,则编译器可以在释放模式下内联函数。

调试模式没有这种优化,专为调试代码而设计。

答案 2 :(得分:3)

你可以使用__debugbreak()内在的。如果您想在特定条件下休息,这也非常方便。例如:

if (var > LIMIT)
  __debugbreak();

答案 3 :(得分:1)

发布模式断点可以方便地运行。让它工作的最简单方法是在代码中调用一个名为release_mode_breakpoint()的函数。然后像这样定义该函数:

#pragma optimize("", off)
void release_mode_breakpoint()
{
    int put_breakpoint_here = 1;
}
#pragma optimize("", on)

然后你可以在那个int声明行上设置一个断点,即使在发布模式下它也会被命中。然后只需将调试器中的堆栈升级回实际需要断点的函数。

实际上,不要将该代码保留在最终的生产版本中,因为未经优化的行可能会阻止编译器正确优化调用代码。