Debug.Assert()只有在步过它时才会触发

6
我正在使用Visual Studio 2010编写一个.NET断言:
Debug.Assert(false, "Testing Debug.Assert");

当我在这行代码上设置断点,等待断点到达,然后让程序继续运行时,一切都运行良好:会弹出一个“断言失败”的对话框。但是,当我移除断点并重新运行应用程序时,Debug.Assert() 语句将被简单地忽略。
有人知道可能是什么原因导致了这种非常奇怪的行为吗?

2
你确定你正在运行调试版本吗?我知道这可能是一个愚蠢的问题 - 但我自己也经常犯这个错误。 - ChrisF
当您“重新运行应用程序”时,您是在调试器中运行它吗?还是没有?(使用 F5 或 Ctrl-F5?)您是否偶尔使用 Express 版本? - Jon Skeet
我正在使用已连接的调试器进行调试。我正在使用Visual Studio 2010专业版。 - Dimitri C.
这不应该发生,你忽略了什么。你能用控制台应用程序和“只有”那一行来重现它吗? - H H
我刚刚使用一个新的WPF应用程序进行了重新测试,其中只有一个按钮调用Debug.Assert()语句,并且我得到了完全相同的行为。 - Dimitri C.
显示剩余3条评论
3个回答

3
我的一个同事立刻知道问题所在。我需要在“Visual Studio 2010 / 菜单 / 选项 / 调试 / 通用”中启用“启用仅限我的代码”标志。显然,这是Visual Studio 2010中的一个错误

2

我遇到了同样的问题。使用 Trace.Assert 可以按预期工作。


嗯,下一次调试会话中,Trace.Assert 开始表现出相同的行为。


啊,找到了问题所在。

  • 如果选中“启用仅限我的代码”,则:

    • 如果在“异常”对话框(Ctrl+Alt+E)中为“公共语言运行时异常”选择了“抛出”,那么 Assert 将被抛出。

    • 如果未选中,“公共语言运行时异常”中的 Assert 将被抛出。

  • 如果未选中“启用仅限我的代码”,则:

    • 如果选中了“抛出”,Assert 将不会被抛出。

    • 如果未选中“抛出”,Assert 将被抛出。

因此,在未选中“启用仅限我的代码”且“公共语言运行时异常”的“抛出”已选中时,Assert 不会被抛出。


1
我们在使用VS 2013时遇到了同样的问题,即使勾选了“启用仅限我的代码”也无济于事。 - Mathias Becher
在异常对话框中,我在哪里可以找到“Thrown”这个东西?我没有看到这样的条目。我们需要取消勾选哪个异常的完整名称是什么? - Roland Pihlakas

0
这里给出的答案没有帮助,但我发现只需在项目的构建设置中为调试配置选项检查“定义DEBUG常量”选项即可解决问题。

The Define DEBUG constant option in project's build settings


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接