2012-03-01 10 views
1

C#のデバッグ出力からさまざまな種類の例外を除外することはできますか?C#のデバッグ出力をフィルタリングする

「System.FormatException」をフィルタリングする必要があります。なぜなら、発生することがわかっているため、出力のゴミを監視しているからです。私は20,000行以上のテキストファイルをスキャンしていますが、そのうちの4分の1は間違っていますが、私の出力にはSystem.FormatExceptionが5000回必要ではありません...

コードは以下のとおりです。あなたが見ることができますが、数字でない場合は、double.parseしないので、エラーをキャッチします。

if (!(dataline.EndsWith(";0") || intCounter == 0)) 
{ 
    try 
    { 
     natMB = double.Parse(splitline[8], NumberStyles.AllowDecimalPoint, NumberFormatInfo.InvariantInfo); 
    } 
    catch 
    { 
     natMB = 0; 
    } 

    double intMB; 
    try 
    { 
     intMB = double.Parse(splitline[9], NumberStyles.AllowDecimalPoint, NumberFormatInfo.InvariantInfo); 
    } 
    catch 
    { 
     intMB = 0; 
+0

私の謙虚な意見では、ユーザの入力を検証するためのエラーをキャッチすることは理想的ではありません。シンプルなRegExは数値の検証を行うことができます。 – Liath

+0

私は同意します。エラーをキャッチするのではなく、入力を修正する方がよいでしょう。 – beta

+0

私が使用しているコードを追加しました – Dashzapp

答えて

7

あなたはそれの上に、次のtry/catchを置くことができる例外を無視したい場合:

try 
{ 
    // Insert your code here 
} 
catch(System.FormatException) 
{ 

} 

はあなたのコードを見て、私はあなたが

double d = 0; 
Boolean success = double.TryParse(splitline[8], out d); 

if(success) 
    Console.WriteLine("Conversion successful!"); 
else 
    Console.WriteLine("Damnit."); 

を使用することをお勧めします代わりに。これは、変換が正常に行われたかどうかをブール値で返します。また、関数を渡した変数に解析されたdoubleを格納します。

+0

私はそれをやっていますが、それはまだ私の出力に表示されます。私は間違ったデータ(句読点、言葉、数字でなければなりません)をキャッチして、それらを0で置き換えようとしています。 – Dashzapp

+0

あなたがコードを投稿したなら、あなたを助けるほうが簡単でしょう。 ;) – beta

+1

個人的にすべてのエラーを記録します。この場合、私はロギングを捨てるよりもエラーを防止しようとします。私の経験では、実際の環境で見つけて修正するのが最も難しいバグは、ロギングが悪いものです。 – Liath

2

この種のために、組み込みの.NETロギングメカニズムが欲求不満です。 log4netまたはNLogのようなものを見て、どのレベルのログが記録されているのか、どの名前空間にあるのかを大量に制御できます。

これらをLog2Consoleと組み合わせて、ライブロギングトレースを作成します。

+0

明確にするために、エラーの発生を防ぐために、この状況では@betaの答えが正しいと思います。報告されたエラーを除外し、ログに記録するものをフィルタリングする状況では、これらの技術を見てください。 – Liath

2

デバッグ中にこの例外を無視する場合は、例外のキャッチを無効にすることができます。メニューで

、に行く:デバッグ例外...は(私のVisual Studioには、ホットキーは、Ctrlキー + DEです)。

[検索...]をクリックし、例外を検索します。あなたがそれを見つけたら、チェックボックスがチェックされていないことを確認してください。それは今それを無視すべきです。

関連する問題