これらをコード全体に散りばめた場合:
MessageBox.Show("See a format exception yet? #1");//todo: remove
(これらのうち7つがあり、1..7から番号が付けられ、そのほとんどが(1,2,5,6,7)を表示します)
最終的に1つのerrmsgが発生します( "例外:テーブル0が見つかりません場所:frmFunction.SetPlatypus ")
それらすべてをコメントアウトすると、別のerr msg( "例外:FormatExceptionの場所frmFunction.getDuckbillRecord ")になります。
これはどうやってできるの?そのような情報メッセージの存在/表示は、コードの実行方法/コードがたどるパスなどに影響を与えるべきではありませんか?
注:getDuckbillRecord()は、すべてのメッセージボックスがある場所です。
アップデート
RTの提案を動機として使用して、私はこれを思いついた:
public static StringBuilder LogMsgs = new StringBuilder();
public static void ExceptionHandler(Exception ex, string location)
{
try
{
LogMsgs.Append(string.Format("{0}\r\n", ex.Message)); //TODO: Comment out before deploying?
DateTime dt = DateTime.Now;
string timeAsStr = string.Format("{0}_{1}_{2}_{3}.txt", dt.Hour, dt.Minute, dt.Second, dt.Millisecond);
using (StreamWriter file = new StreamWriter(timeAsStr))
{
file.WriteLine(LogMsgs.ToString());
}
. . .
//in the problematic code, replacing the MessageBox.Show() calls:
TTBT.LogMsgs.Append("Made it to location 1 in frmOverFunction.GetDuckbillRecord()\r\n");
...そしてそれは役に立ちました-7つの「コードウェイポイント」の最初の直後に例外に到達したので、明らかにその特定のデンマークで何かが腐っています。
更新2
どこかでクラッシュすることなくアプリを実行できるというまれな経験の後、メインフォームのOnClosing()イベントのファイル書き込みコードも必要であることに気付きました-グローバル例外ハンドラーにあることはしばらくの間機能していました-私は予期していませんでしたアプリのクリーンな終了が二度と起こらないと思います。