发布模式中的断点

Ane*_*nan 7 visual-studio-2010

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

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

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

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

小智 17

我正在使用VS2015.经过大量失败的解决方案,我找到了一个适合我的方案.只需在菜单 - >调试 - >选项 - >调试 - >常规下取消选中"启用我的代码".请参见附图: 在发布模式下启用调试-VS2015

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


Wou*_*ort 9

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

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


小智 6

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

#pragma optimize("", off)
void release_mode_breakpoint()
{
    int put_breakpoint_here = 1;
}
#pragma optimize("", on)
Run Code Online (Sandbox Code Playgroud)

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

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


Con*_*shi 6

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

if (var > LIMIT)
  __debugbreak();
Run Code Online (Sandbox Code Playgroud)