2

我总是这样写代码:

If SomethingIsTrue Then
    'DoThis
ElseIf SomeOtherThingIsTrue Then
    'DoThat
Else
    Debug.Assert (False)'Doh!! I forgot to handle a certain condition
End If

在 VB6 中,这很好用。在 IDE 中测试我的应用程序期间,它刚刚停在 Debug.Assert(False) 行,我看到了我遗漏的地方。

但是 VB.NET 并没有止步于此,而是给了我一个巨大的消息框。这似乎是 Debug.Assert 的标准行为。

我有两个问题,请:1)我怎样才能让它在该行中平稳停止而不是显示消息框?2)我怎样才能使它在运行时(!)不显示消息框,而是我的应用程序只是继续运行而不停止或显示消息框?

谢谢!

4

2 回答 2

2

我会沿着这条线写一些东西:

if debugger.isattached=True then
   debugger.break
end if

只需将它包装在一个共享子中,您就可以在 else 语句中简单地调用它。

代码是在没有 Visual Studio 的情况下键入的,所以我希望它可以工作。

于 2012-12-13T08:07:01.287 回答
0

如何让它在该行中平稳停止而不是显示消息框?

只需单击Retry弹出的消息框。来自MSDN

如果您的应用程序正在调试器中运行,则单击重试会将您发送到调试器中的代码,或者如果不是,则提供打开调试器。

单击Ignore将忽略该消息。


我怎样才能使它在运行时(!)不显示消息框,而是我的应用程序只是继续运行而不停止或显示消息框?

我的意思不是你在运行时的意思,因为所有断言都是在你的代码运行时发生的,因此是在运行时。

如果您的意思是在没有调试器的情况下运行应用程序时应该忽略断言,只需进行发布构建而不是调试构建。该Debug.Assert方法仅适用于调试版本,而调试版本的重点是它们易于调试。


如果您仍然想抑制消息框,请参阅自定义断言行为

例如,您可以重写TraceListener.Fail方法以写入事件日志,而不是显示 Assertion Failed 对话框。

要以这种方式自定义输出,您的程序必须包含一个侦听器,并且您必须从TraceListener继承并覆盖其TraceListener.Fail方法。

于 2012-12-13T08:11:20.730 回答