2011-01-06 13 views
2

私が書いたアプリケーションに問題があります。基本的には、ユーザーが入力したコードに基づいて動的に生成されたアセンブリを作成しています。
コンパイルして正常に動作しますが、何らかの理由でコンパイルされたアセンブリで例外が発生すると、すべてがtry/catchブロックで完全にコーティングされていてもメインプログラムがクラッシュします。動的に生成されたアセンブリをキャッチする際のエラー

私は生成されたアセンブリでは、ユーザのコードを囲み、そしてまた私のアプリでは、アセンブリの呼び出しの周りにキャッチ/しようとする/ catchブロックを試してみてください追加

StringBuilder verificationErrors = new StringBuilder(); 
argz[0] = "hello!"; 
argz[1] = verificationErrors; 
object loResult = null; 
try 
{ 
    loResult = loObject.GetType().InvokeMember("doThis", BindingFlags.InvokeMethod, null, loObject, argz); 
} 
catch (Exception p) 
{ 
    MessageBox.Show(p.Message); 
} 

エラーがスローされているように見えます私のアプリの範囲外で、それを捕まえる方法やその効果を知ることはできません...どんなアイデアですか?

+4

エラーは何ですか? –

+4

...どのようにアセンブリを生成していますか? CodeDom? Reflection.Emit?他に何か? –

+0

'loResult = .....'にブレークポイントを設定してデバッグを試みましたが、コントロールがその行に到達したかどうかを確認しましたか? –

答えて

0

p.Messageの呼び出しによって例外がスローされる可能性があります。 1つは、デフォルトのMessageプロパティを使用していると仮定しますが、Messageプロパティをオーバーライドするカスタム例外になる可能性があります。

さらにtry ... catchでコードをcatchブロックにラップし、エラーが発生した場合は「予期しないエラーが発生しました」と言って、何でもできることをログに記録します。

+0

p.Messageではない、私は空のキャッチを入れてみましたが、まだエラーをキャッチしていません。生成されたアセンブリ内の関数を呼び出す行のエラーです。私はそれが間違っている理由を正確に知っている、ユーザーが自分のコードを入れることが許可されているので、予防できないだけなので、捕まえることができるようにする必要がある。ユーザーのコードの周りにtry/catchブロックがあり、生成されたアセンブリ関数が呼び出されますが、まだ処理されていない例外があるとクラッシュします。 – Brian

+0

SeleniumExceptionsの特定のキャッチブロックを入れてみることがあります。 SeleniumExceptionオブジェクトの内部の詳細を知らなくても、それがどのように動作するのかは分かりません。つまり、ネットプログラマーのように、「catch(Exception e)」はすべてを捕まえることになっているという訓練を受けていますが、実際にはその例外とそれに関連するコードにはCLRが操作する必要があります。また、例外をデバッグするとき(Debug ... WIndows ... Call Stack)、呼び出しスタックを確認して表示してください。それはあなたに何が起こっているかの手がかりを与えるかもしれません。 –

+0

アドバイスの最後の部分、デバッグできないときは、計測器。ユーザがコンパイルしたコードを事前に投稿して、それが何を伝えているかを確認します。 –

0

デバッグでプログラムを実行し、例外がスローされたときにVisual Studioにブレークを指示すると、スタックトレースを調べて例外をスローしているメソッドを特定できるはずです。デバッグ/例外へ

  1. ゴー...
  2. コラム「スローさ」
  3. クリックして「OK」
  4. にデバッグでプログラムを実行し、「共通言語ランタイム例外」の前にあるボックスをチェックしますモード
+0

これは、動的に生成されたアセンブリ、つまりアセンブリを制御しているアプリケーションだけをデバッグすることはできないため、あまり役に立ちません。 – Brian

+0

そして、私はエラーが発生している場所を正確に知っています。ユーザーが動的に作成したアセンブリにC#コードを入力しているので、それを防ぐために何もできません。これはコンパイルエラーではなく、ときどき発生するランタイムエラーですが、try/catch内に直接入っていても捕捉されません。 – Brian

+0

投稿した行のうち、エラーがスローされていますか? –

関連する問題