2009-06-16 18 views
3

イベントログに書き込むとき、アプリケーションは列挙型を使用してイベントログ項目に添付するエラー番号を生成します。アイデアは、私たちが間違っている可能性があることを列挙し、それぞれにIDを割り当てて、イベントログを見て何が間違っているのかをすぐに特定できるようにすることです。イベントログに書き込む列挙値を追加する

1つの列挙型にはアプリケーションのクラスを表す値/ IDが含まれ、別の列挙型には実行中に発生する既知のエラーのエラーコードを表す値が含まれます(無効な日付= 1、無効な量= 2など)。

ここで、メソッドへの無効な入力が検出されたとします。 1つの列挙のメソッドを含む適切なクラスIDと2番目の列挙からの特定の「無効な入力」エラーを追加し、追加した結果をメッセージ文字列とともにEventLog.WriteEntry()メソッドに渡します。

問題は、列挙型の値の結果を含む変数をWriteEntry()メソッドに渡すと、何もイベントログに書き込まれないということです。ただし、値がメソッドのパラメーターで通常の整数として渡された場合、イベントは正常に書き込まれます。

これはなぜ起こっているのですか?

+0

デバッグするとどうなりますか?だから、彼らは常に正確に表示されますか?また、何をしているのかを示すコードスニペットを投稿できますか? – Tetraneutron

+0

VB.NETを使用していますか?もしそうなら、Option Strict Onをオンにして、もう一度オフにしないでください。これは、コンパイル時エラーまたは実行時例外が無視されているようです。 –

+0

ご返信ありがとうございます。残念ながら、オプションを厳密にオンにすると、他の問題(暗黙的な変換の警告など)が多数発生し、これらの問題を修正するコストは圧倒的です。私はいつも厳しいオプションを使いますが、前任者は何らかの理由でそれを気に入らなかった。 –

答えて

0

いずれにしても、なぜenumを使用しますか?

例外の拡張機能を使用する方がはるかに理にかなっていませんか?

throw new InvalidArgumentException("error message")

1

イベントログを2回呼び出して、コードに挿入します。

EventLog.WriteEntry(1005); 
EventLog.WriteEntry(MethodIDs.FirstMethod + ErrorIDs.FifthError); 

最初の行にブレークポイントを置き、プログラムを実行してから、関数の呼び出しを1回実行して何が起こっているかを確認します。

おそらく数秒以内に問題が発生します。

+0

1回目のコールではイベントログには正常に書き込まれますが、2回目は何もしません。 –

+1

あなたはそれをシングルステップでしたか? シングルステップができない場合は、コードの実行中に何が起きているのかを書き出すためにいくつかの呼び出しを行います。例えばVBを使用している場合は、MessageBox.Show( "WriteEntry with value"&value)のように入力します。これらの呼び出しをWriteEntry関数全体に渡すことで、コードの進行状況を報告します。おそらく関数に愚かな値(たとえば、1005の代わりに-6)を渡していて、If文が何も起こらない原因となっています。さらに詳しいヘルプが必要な場合は、WriteEntryコードとその呼び出しの例を掲載してください。 –

関連する問題