第一次机会异常

3
我一直在阅读 MSDN 帮助文档,以了解 Visual Basic。尝试使用定时器示例后,我将一个标签和定时器组件拖入设计器,并添加以下内容到组件子程序中。
Label1.Text = My.Computer.Clock.LocalTime.ToLongTimeString

在调试期间,立即窗口的输出如下所示:

在 Microsoft.VisualBasic.dll 中发生了类型为“System.InvalidCastException”的第一次异常
在 Microsoft.VisualBasic.dll 中发生了类型为“System.InvalidCastException”的第一次异常

在先前的 MSDN 示例中,使用上下文菜单组件也会出现相同的错误。我应该尝试使用 Try...Catch...Finally 处理此错误并继续进行吗?还是说我正在处理更加严重的问题?

哈哈,朋友,你生活在一个多时区的世界中! - Jonathan Parker
5个回答

2

在“调试”菜单->“异常”中,您可以启用调试器在第一次抛出异常时停止,即使它稍后会被捕获;如果您想找出发生了什么,这是最简单的方法。


2
当你看到关于“第一次机会异常”的内容时,它只意味着在你调用的代码中捕获了一个异常,但不一定意味着代码失败。如果代码运行而不导致程序崩溃并返回有效值,则没有问题。当你实现自己的try/catch块时,也会在调试窗口中看到有关第一次机会异常的输出。

0
一个快速简便的解决方案,用于调试和诊断“First Chance Exception”:
AppDomain.CurrentDomain.FirstChanceException += CurrentDomainOnFirstChanceException;

然后

private void CurrentDomainOnFirstChanceException(object sender, FirstChanceExceptionEventArgs firstChanceExceptionEventArgs)
    {
        if (firstChanceExceptionEventArgs.Exception is NullReferenceException)
        {
            // do your handling and debugging :)
        }
    }

运行时发生多个“第一次机会异常”可能会损害应用程序的性能,因为异常处理代价很高。特别是在Web应用程序中。你可以添加此处理程序并查看特定的“第一次机会异常”,并尝试避免/纠正它们。


0
在第一次异常中,检查异常的详细信息。您应该会看到一个栈帧/跟踪属性。在那里,您应该能够看到错误发生的行。这应该会帮助您解决问题。

0
在IDE中,尝试前往“工具”>“选项”>“项目和解决方案”>“VB默认值”,并将“选项严格”设置为“打开”-这可能有助于在编译项目时捕获转换问题,而不是在运行时。
“第一次机会异常”并不一定意味着您的代码存在问题。它可能意味着IDE、编译器或任何其他涉及组件遇到并处理了错误,在此过程中调试器被通知,并将异常报告给立即窗口。这是一个关于该主题的优秀帖子:

http://blogs.msdn.com/davidklinems/archive/2005/07/12/438061.aspx


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