当Debug.Assert失败时导致VS2010调试器中断

Debug.Assert的参数Debug.Assert值为false时,是否有任何方法可以在调试时导致Visual Studio 2010中断?

示例:在我的代码中,我有这样的行:

 Debug.Assert(!double.IsInfinity(x)); 

如果我没有调试,则在断言失败时会弹出一个窗口。

但是当我调试时,断言会记录到“输出”窗格中,这很容易被遗漏; 没有弹出窗口,调试器不会停止。 因此:当Debug.Assert失败时,有没有办法强制Visual Studio调试器中断?

(顺便说一句:我正在开发一个基于WPF的桌面应用程序。在Windows窗体应用程序中,行为似乎有所不同:这里,调试器在Debug.AssertDebug.Assert 。)

编辑 :请让我澄清:我不是在寻找Debug.Assert()的替代方法,因为我使用的代码和外部代码充满了Debug.Assert()语句。 我正在寻找一种方法来导致Visual Studio调试器在Debugg.Assert失败时Debugg.Assert 。 (我认为早期的VS版本就是这样做的,并且VS2010中的行为发生了变化)。

如果通过调试意味着使用“Step Into”function,请参阅此MS对问题的回答。

http://connect.microsoft.com/VisualStudio/feedback/details/522995/system-diagnostics-debug-assert-doesnt-pop-up-messagebox-correctly-when-step-into-it-in-vs-2010-和2008年

在Assert语句中使用“Step Over”确实解决了这个问题(对我而言)。

您可以将条件断点用于此类行为,只需在要断开的行上设置断点,然后右键单击左侧的点并选择条件,在弹出窗口中输入所需的条件(在您的情况下为double)。 IsInfinity(X))

使用Debugger.Break方法(在System.Diagnostics命名空间中)。 如果您在调试器中运行,这将中断执行。

它似乎至少在控制台应用程序中按预期工作:在调试版本中,会弹出一个对话框,允许您使用调试器进入应用程序,但在发布版本中,没有任何反应。 不可否认,我只是使用了一个简单的Debug.Assert(false); ,但我不明白为什么这应该有很大的不同。 我正在运行Visual Studio 2010 SP1 Ultimate。

我建议你仔细看看你的构建设置。

这是我使用的代码:

 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; namespace ConsoleApplication { class Program { static void Main(string[] args) { System.Diagnostics.Debug.Assert(false); Console.ReadLine(); } } } 

你不能在!double.IsInfinity(x)而不是使用断言时抛出exception吗?

您的应用程序似乎从Debug类中删除了默认的TraceListener,并将其替换为以不同方式实现Fail(string)方法的自定义TraceListener。

您可以通过搜索Debug.Listeners的代码来Debug.Listeners ,看看是否清除或修改了默认代码,或者查看app.config中是否有trace部分。

默认情况下,从我读过的内容来看,你一定得到弹出窗口。

如果使用DefaultTraceListener您可以将以下部分添加到app.config文件中,该文件可以打开Debug.Assert(false)

      

有关详细信息,请参阅assert元素和DefaultTraceListener.AssertUiEnabled属性 。