私はWinformsアプリケーションですべての未処理の例外をキャッチします。すべての未処理の例外をキャッチ
[STAThread]
static void Main()
{
if (!AppDomain.CurrentDomain.FriendlyName.EndsWith("vshost.exe"))
{
Application.ThreadException += new ThreadExceptionEventHandler(MyCommonExceptionHandlingMethod);
}
Application.Run(new frmLogin());
}
private static void MyCommonExceptionHandlingMethod(object sender, ThreadExceptionEventArgs t)
{
Exception ex = t.Exception;
StackTrace trace = new StackTrace(ex, true);
var db = new MyDataContext();
Error error = new Error();
error.FormName = trace.GetFrame(0).GetMethod().ReflectedType.FullName;
error.LineNumber = trace.GetFrame(0).GetFileLineNumber();
error.ColumnNumber = trace.GetFrame(0).GetFileColumnNumber();
error.Message = ex.Message;
db.Errors.InsertOnSubmit(error);
db.SubmitChanges();
if (new frmError(ex).ShowDialog() != DialogResult.Yes)
System.Diagnostics.Process.GetCurrentProcess().Kill();
}
問題は、FormName、LineNumber、ColumnNumberが正しく返されないことがあることです。ここで私は時々得るという結果は次のとおりです。
--FormName-- --Line/Column-- --Message--
System.Linq.Enumerable 0 0 Sequence contains no matching element
System.RuntimeMethodHandle 0 0 Exception has been thrown by the target of an invocation.
System.Number 0 0 Input string was not in a correct format.
System.Number 0 0 Input string was not in a correct format.
System.ThrowHelper 0 0 Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
あなたが見ることができるように、LineNumbersとColumnNumbersが0 FORMNAMEがSystem.Linq.Enumerableである...
はどのように問題を解決することができますか?
フォームの名前が "System.Linq.Enumerable"ではありません。 0以外の行番号があると仮定すると、その情報で次に何をしますか? System.Linq用の正しいPDBファイルがある場合でも、行番号を含むPDBファイルはありません。独自のプロジェクトと同じように、.NETアセンブリのビルド設定は「pdbのみ」です。アプリのリリースビルドをテストしてください。 –