2017-10-09 20 views
2

リアルタイムコントローラ(Windows 7 Embedded)のバックグラウンドで実行されるWindows C#プログラム(.net 3.5)があります。予期せぬプログラムの終了をログに記録する方法

数日後、プロセスは確実に終了します。 私はプログラムの動作と例外を徹底的に記録しています。 例外をスローする可能性のあるものはすべて、try/catchで囲まれ、ログファイルに書き込まれており、Windowsイベントログに書き込まれる例外がログに記録されている場合に発生します。

しかし、プログラムの終了を引き起こす可能性のある例外を暗示するものはログには何もありません。

プログラム終了を捕捉して記録する他の方法はありますか?

これまでのところ、私はオンラインデバッグセッションでバグを再現できませんでした。

プログラム自体はとても簡単です。 2つのストップウォッチを使用してスレッドを生成し、リアルタイムプログラムと通信します。 '生きている'ブール値、 'エラー'整数を書き出し、別の整数を読み込みます。ログファイルサイズは10 MByteに制限されています。サイズに達すると、ファイルの名前が日付に変更され、新しいファイルが開きます。 30日以上経過したファイルは削除されます。

私はWindowsイベントログをチェックしており、プログラムに直接関連するものは見つかりませんでした。

あなたは何をしますか?

+2

グローバル例外ハンドラを見て、maybyそれが何かをキャッチすることができます。 – BWA

+0

@BWAそれはあまりにも私の提案になり、同意します。[の – rmjoia

+0

可能な複製をどのように.NETアプリケーションですべての例外/クラッシュをキャッチする](https://stackoverflow.com/questions/82483/how-to-catch-all-exceptions-crashes-in-a-net-app) – Sinatr

答えて

0

グローバルな例外を考慮することをお勧めします。あなたが参照できるグローバルな例外の取り扱いに関する詳細は、また

AppDomain.CurrentDomain.FirstChanceException += (sender, eventArgs) => 
{ 
    Debug.WriteLine(eventArgs.Exception.ToString()); 
}; 

:あなたは、次のコードを追加するのと同じくらい簡単に行うことができ、アプリケーション内で発生するすべての例外をキャッチする最初のチャンス例外をキャッチすることができますthisに本当に役立つ記事。

+0

これは良いヒントです。ありがとう。 – Simorgh

0

私は私自身の質問に答えることができました。

残念ながら、私は無関係とみなした質問を残しました。 アプリケーションは、ユーザがログインする前にシステム起動時にWindowsタスクスケジューラによって起動されます。タスクプロパティには、3日以上かかるとタスクを終了させるチェックボックスがあります。私はそれをオフにするのを忘れて:(。

はあなたの貢献をいただき、ありがとうございます。

関連する問題