2012-05-13 1 views
0

からスローされているのと同じcatchブロックでキャッチされていますにスローカスタム例外はすぐにこれはデバッガの問題になるが、ここでは行くことがあり

私は、コードのこの部分を持っている:

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を使用しています。書かれたよう

おかげで、 デーン

+1

これは、デバッガがその仕事をしているところです。未処理の例外を検出します。あなたは何を期待していますか? – MarkJ

+0

私はそれが呼び出し側にバブルアップし、そこで爆発することを期待していました。 – Danedo

+1

コールスタックを囲んでTryブロックを探します。囲みTryブロックがない場合、未処理の例外動作が発生します。つまり、デバッガ*の下で*を実行している場合、デバッガは例外をスローした元の行を表示できるようにコールスタックを巻き戻します。例外が発生した理由をデバッグするのに役立ちます。スタンドアロンEXEから実行してみてください。標準エラーダイアログで終了します。あなたのコードは正常に動作していると思いますが、デバッガだけで混乱するかもしれません。 – MarkJ

答えて

1

は、あなたのコードは常に、デバッガが尻込みさせるために起こっている未処理の例外をスローします。このメソッドを呼び出すコードにQuickBooksConnectionExceptionをキャッチしてください。 (そして、そうだよ、C#でにJavaのキーワードがスローされる)

+0

自分が行っているようにカスタム例外をスローすることは悪い考えを暗示しているようです。彼は間違って何もしていない。実際、彼がやっていることは、多くの点で優れた実践です。なぜなら、デバッガがその時点でブレークして、コードをトレースして例外がスローされた理由を知ることができたからといって、例外をスローするのはコーディングが悪いというわけではありません。 –

+0

@SteveDog私はそれが悪い習慣であることを暗示したとは思わない。私はそれがキャッチされた場所でそれを扱うことができない場合は、例外のスタックをバックアップする正しいアプローチだと思います。 – McGarnagle

1

デバッガが例外に対してブレークするときの設定を変更できます。

See here.

+0

+1。デバッガが例外で壊れるかどうかを判断するルールは次のとおりです。http://msdn.microsoft.com/en-us/library/x85tt0dd – MarkJ

0

これは、その仕事をしているだけのデバッガです。通常、処理されない例外はすべてキャッチされます。私はあなたのコードがうまく動作していると思う、それはおそらくあなたを混乱させるデバッガです。

ここでは何が起こっているかを示すための実験です。 Try-Catchブロックを完全に削除します。 &コードを実行すると、COMExceptionが発生します。デバッガは未処理のため「キャッチ」し、スローする行を強調表示します。

例外は、呼び出しスタックを囲み、囲みTryブロックを探します。 tryブロックを囲んでいなければ、ランタイムはそれを処理します。つまり、をデバッガの下で実行している場合、デバッガは例外をスローした元の行を表示できるようにコールスタックを巻き戻します。例外が発生した理由をデバッグするのに役立ちます。デバッガなしでスタンドアロンのEXEまたはWebサイトから実行してみてください。標準エラーダイアログで終了します。

rulesは、デバッガが例外でブレークするかどうかを決定します。

関連する問題