C# Assert()仅在单步执行时触发

C# Assert()仅在单步执行时触发,c#,.net,visual-studio-2010,debugging,assertions,C#,.net,Visual Studio 2010,Debugging,Assertions,我正在使用Visual Studio 2010编写.NET断言: Debug.Assert(false, "Testing Debug.Assert"); 当我在这行代码上设置断点时,等待断点命中,然后让程序继续运行,一切正常:弹出一个“断言失败”对话框。但是,当我删除断点并重新运行应用程序时,Debug.Assert()语句将被忽略 有人知道是什么导致了这种奇怪的行为吗?我的一位同事立刻知道了问题所在。我必须在“VisualStudio2010/Menu/Options/debug/Gene

我正在使用Visual Studio 2010编写.NET断言:

Debug.Assert(false, "Testing Debug.Assert");
当我在这行代码上设置断点时,等待断点命中,然后让程序继续运行,一切正常:弹出一个“断言失败”对话框。但是,当我删除断点并重新运行应用程序时,Debug.Assert()语句将被忽略


有人知道是什么导致了这种奇怪的行为吗?

我的一位同事立刻知道了问题所在。我必须在“VisualStudio2010/Menu/Options/debug/General”中启用“仅启用我的代码”标志。显然这是一个问题。

我也遇到了同样的问题。使用
Trace.Assert
可以正常工作


嗯,
Trace.Assert
在下一次调试会话中开始显示相同的行为


啊,发现问题了

  • 选中“仅启用我的代码”

    • 如果在中检查了“抛出”是否存在“公共语言运行时异常” 在“异常”对话框(Ctrl+Alt+E)中,将抛出断言

    • 如果未选中,将抛出断言

  • 取消选中“仅启用我的代码”

    • 如果选中“抛出”,则不会抛出断言

    • 如果未选中“抛出”,则将抛出断言


因此,当取消选中“仅启用我的代码”并检查“抛出”是否存在“公共语言运行时异常”时,将不会抛出断言。

此处给出的答案没有帮助,但我发现它与在项目的生成设置中为调试配置检查“定义调试常量”选项一样简单:


您是否100%确定正在运行调试版本?我知道这可能是一个愚蠢的问题,但我自己也做过很多次。当你“重新运行应用程序”时,你是在调试器中运行它,还是不运行?(F5或Ctrl-F5?)您是否碰巧使用了快速版?是的,我正在运行调试版本。单步执行Assert语句时,会弹出断言对话框,但如果我运行应用程序而不单步执行代码,则不会弹出断言对话框。遗憾的是,重建应用程序没有帮助。我正在使用附带的调试器进行调试。我使用的是Visual Studio 2010 Professional。在VS 2013中也发生了同样的行为,但即使选中了“仅启用我的代码”。在异常对话框中,我在哪里可以找到这个“抛出”的东西?我看那里没有这样的入口?我们需要取消选中的异常的全名是什么?