2009-10-31 96 views
2

我目前使用VS2008和VB.NET。Visual Studio 2008調試器不報告一些常見錯誤

當我嘗試填充未用對象實例化的隊列時,程序會掛起而不會引發錯誤。

過去幾天我在程序的不同部分多次遇到這個問題。

這可能是什麼原因造成的?

下面的代碼:

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("-")) 

VS

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

編輯:當我做一個新項目,輸入以下代碼,即t也沒有拋出異常。但是,當我嘗試圍繞它時,異常會被捕獲。

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 
+0

請張貼一些導致您的問題的代碼。 – 2009-10-31 07:00:34

回答

2

Visual Basic 2008調試器似乎無法處理在「處理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 

這種情況有解決方法有兩種。將「處理MyBase.Load」更改爲「處理MyBase.Shown」。第二種方法是將它編程到沒有在.load區域初始化的地方。

1

沒有更多的細節,這是不可能的回答這個問題。但如果我不得不猜測,我會懷疑某種無限循環。你是否使用過調試器來遍歷你的代碼,看看它在做什麼?

+0

是的,我已經完成了代碼。當它到達實例化ConsoleBufferLine的Enqueue行時,它會通過構造函數OK,但是當它退出來執行實際的Enqueue時,它會通過顯示窗體窗口並且不允許任何內容掛起。試圖超越Enqueue是不可能的,因爲它簡單地掛起。 – 2009-10-31 07:10:36

1

我不確定爲什麼Visual Studio掛在第一個示例代碼上,但肯定有使用中的一個錯誤。

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

在上述樣品中,您正在聲明參考Queue但沒有創造它的一個實例。 Buffer的值將爲Nothing,因此調用Enqueue將導致NullReferenceException被拋出。第二個示例的工作原因是額外的New關鍵字導致創建隊列的一個實例。

這裏可能發生的情況是在這個特定的場景中出現異常助手的問題。它應該顯示,如果第一個代碼示例運行,並可能有另一個問題,這是給它一個問題顯示。

+0

任何關於如何確定異常助手引發問題的想法? – 2009-10-31 23:18:50