0

这可能是调试器问题,但这里有:

我有这段代码:

Private Function Connect() As Boolean
    Try
        sessionBegun = False
        connectionOpen = False

        rp = New RequestProcessor2()

        rp.OpenConnection2("","EZSystem", QBXMLRPConnectionType.localQBD) 

        connectionOpen = True 
        ticket = rp.BeginSession("", QBFileMode.qbFileOpenDoNotCare)
        sessionBegun = True 

        Return True
    Catch e As COMException
        exceptionHandler.HandleConnectionException(e)
        **Throw New QuickBooksConnectionException(e.Message)**
    End Try
End Function

我的意图是将低级异常“转换”为更有意义的东西,所以我抛出了我自己创造的异常。我想让这个冒泡到我可以处理的地方。

然而,发生的事情是我的调试器中断并告诉我抛出了“QuickBooksConnectionException”类型的异常。

我知道,我只是扔了它,你为什么要接它?

根据我的阅读,这应该可以工作,并且似乎没有类似的 Java throws 关键字,所以也许它是我的调试器。

我正在使用 SharpDevelop。

谢谢,戴恩

4

3 回答 3

1

正如所写的那样,您的代码会引发一个未处理的异常,这总是会导致调试器停止运行。您只需在调用此方法的代码中捕获QuickBooksConnectionException。(你是对的,C# 中没有与throws Java 关键字等效的东西。)

于 2012-05-13T01:06:42.657 回答
1

您可以更改调试器何时因异常而中断的设置。

看这里。

于 2012-05-13T02:16:03.703 回答
0

这只是调试器在做它的工作。它通常会捕获任何未处理的异常。我认为您的代码运行良好,调试器可能会让您感到困惑。

这是一个实验来显示发生了什么。完全删除您的 Try-Catch 块。运行代码并导致 COMException。调试器将“捕获”它,因为它未处理,并突出显示抛出它的行。

一个异常冒泡调用堆栈寻找封闭的 Try 块。如果没有封闭的 Try 块,则运行时会处理它。这意味着如果您在调试器下运行,调试器将回退调用堆栈,以便向您显示引发异常的原始行。帮助您调试异常发生的原因。尝试从没有调试器的独立 EXE 或网站运行。它将以标准错误对话终止。

以下是确定调试器是否因异常而中断的规则。

于 2012-05-13T13:45:37.913 回答