【问题标题】:Visual Studio 2008 Debugger is not reporting some common errorsVisual Studio 2008 调试器未报告一些常见错误
【发布时间】:2009-10-31 06:56:44
【问题描述】:

我目前正在使用 VS2008 和 VB.NET。

当我尝试填充尚未使用对象实例化的队列时,程序只是挂起而不会引发错误。

在过去的几天里,我在程序的不同部分多次遇到这个问题。

这可能是什么原因?

代码如下:

Structure ConsoleBufferLine
    Public EntryDate As Date
    Public Text As String

    Public Sub New(ByVal textLine As String)
        Text = textLine
        EntryDate = DateTime.Now
    End Sub
End Structure

导致挂起的代码:

Private Buffer As Queue(Of ConsoleBufferLine)
Buffer.Enqueue(New ConsoleBufferLine("-"))

Private Buffer As NEW Queue(Of ConsoleBufferLine)
Buffer.Enqueue(New ConsoleBufferLine("-"))

编辑:当我创建一个新项目并输入以下代码时,它也未能引发异常。但是,当我在它周围放置一个 try-catch 时,异常就会被捕获。

Public Class Form1

  Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Dim S As New SortedList(Of String, String)
    S.Add("lol", "value")
    S.Add("lol", "value")
  End Sub
End Class

【问题讨论】:

  • 请发布一些导致问题的代码。

标签: .net vb.net visual-studio visual-studio-2008 debugging


【解决方案1】:

Visual Basic 2008 调试器似乎无法处理“Handles MyBase.Load”事件期间引发的异常。

比如这段代码:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    'All code in here that throws exceptions will not throw an exception
    Throw New Exception("FFF")      'This will not be handled by VS debugger.
End Sub

有两种方法可以解决这个问题。将“Handles MyBase.Load”更改为“Handles MyBase.Shown”。第二种方法是将其编程到 .load 区域中没有初始化的地方。

【讨论】:

    【解决方案2】:

    没有更多细节,就不可能回答这个问题。但如果我不得不猜测,我会怀疑某种无限循环。您是否使用调试器单步调试您的代码并查看它在做什么?

    【讨论】:

    • 是的,我已经逐步完成了代码。当它到达实例化 ConsoleBufferLine 的 Enqueue 行时,它通过构造函数 OK,但是当它退出执行实际的 Enqueue 时,它​​会通过显示表单窗口而挂起并且不允许任何事情。尝试超越该 Enqueue 是不可能的,因为它只是挂起。
    【解决方案3】:

    我不确定为什么 Visual Studio 会挂在第一个示例代码上,但使用中肯定存在错误。

    Private Buffer As Queue(Of ConsoleBufferLine)
    Buffer.Enqueue(New ConsoleBufferLine("-"))
    

    在上面的示例中,您声明了一个引用 Queue,但没有创建它的实例。 Buffer 的值将为 Nothing,因此对 Enqueue 的调用将导致抛出 NullReferenceException。第二个示例有效,因为额外的 New 关键字会导致创建队列实例。

    这里可能发生的情况是,针对此特定场景调出异常助手时出现问题。如果第一个代码示例运行,它应该显示,并且可能存在另一个问题,导致显示问题。

    【讨论】:

    • 有什么想法可以弄清楚引发异常助手的问题是怎么回事?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多