1

例外を文書化していないように見えるライブラリを使用しています。このライブラリは、会社が製造する製品と通信するために使用されます。スローされる例外を区別できるようにしたいのですが、例外の名前がわかりません (たとえば、通信タイムアウトまたは低電圧状態の間)。

それらの例はすべてcatch(Exception ex). 個々のエラーをキャッチするために使用する必要があるものを見つけるにはどうすればよいですか? 私がそうするとき、私はex.toString()このようなものを手に入れます:

System.Exception: Timeout
    at CMLCOMLib.EcatObj.Initialize()
    at copley_cmo_test.MainWindow.btnConnect_Click(Object sender, RoutedEventArgs e)
in c:\Users\adam.siembida\Desktop\copley_cmo_test\copley_cmo_test\MainWindow.xaml.cs:line 41
4

5 に答える 5

10

これ:

System.Exception: Timeout

彼らが裸を投げているだけであることを示していますSystem.Exception、例えば

if (weHaveNoApiDesignSkills)
{
    throw new Exception("Timeout");
}

より適切に設計されたいくつかの例外がある可能性がありますが、あなたが示したものは有望ではありません:(

残念ながら、例外のメッセージを使用してそれらを区別しない限り (ほとんどの場合、これは悪い考えです)、スタックしてしまいます。ライブラリの作成者に、将来のリリースで問題を改善できるかどうかを確認する価値があるかもしれません。

于 2013-06-20T17:17:09.000 に答える
3

などのキャッチオール コンストラクトでキャッチし、返されたcatch(Exception ex)を調べます。に等しい場合は、より具体的なものをスローしていないことを意味します。Typeex.GetType()typeof(Exception)Exception

于 2013-06-20T17:18:21.663 に答える
0

使用しているライブラリ内の API が適切に文書化されていない場合は、ベース例外をキャッチし、メッセージだけでなく、例外全体を文字列に変換してログに記録する必要があります。例えば。

   try
   {
       //api call which throws exception.
   }
   catch(Exception ex)
   {
       //log ex.ToString();       
   }
于 2013-06-20T17:31:32.113 に答える
0

ところで、例外がキャッチされたときに (つまり、catch ブロックで) 停止している場合$exception、ウォッチ ウィンドウに入ると、例外全体が表示されます。

于 2013-06-20T17:20:53.367 に答える
-1

たとえば、逆コンパイラを使用します。

http://www.jetbrains.com/decompiler/

.net には、Java のように明示的な例外宣言がないため、それが唯一の方法であることがわかります。

于 2013-06-20T17:18:08.947 に答える