2013-03-07 17 views
5

C#コードにはNullReferenceExceptionが定期的にスローされますが、捕捉される関数があります。私のコードのこの特定のセクションでこの例外を壊さないようにVisual Studioデバッガに指示する方法はありますか?C#コード内でスローされた例外を選択的に無視します。

EDITこの例外は、コード内の他の箇所で打ち切る必要がありますが、同じ機能ではありません。

+4

良い方法は、起こらないようにすることです。なぜあなたはそれを防ぐことができませんか? –

+1

彼のコントロール外の外部コードかもしれません – Pondidum

+1

私はそれができませんでした、私が継承したコードです、そして、私はそれを悩ましているバグのいくつかを修正するまで、あまり触れないようにしています。基本的には、何かを書き直して書き直す前に、クライアントに手を差し伸べるために必要な簡単な修正があります。 –

答えて

11

NullReferenceExceptionをデバッグしていて、デバッグ中に他のものを一時的に無視したい場合は、デバッガで無視する関数をマークすることでこれを行うことができますDebuggerNonUserCode属性

[DebuggerNonUserCode] 
private void MyMethod() 
{ 
    // NullReferenceException exceptions caught in this method will 
    // not cause the Debugger to stop here.. 
} 

NOTE例外がでキャッチする方法を言っている場合にのみ動作すること。デバッガで常に例外が発生するように設定した場合、デバッガがブレークすることはありません。メソッド内でコードの任意の部分だけではなく、メソッドでのみ機能します。

+0

これは実際に私がしなければならないことに完璧です。これは恒久的な変更ではなく、多かれ少なかれ今のところデバッグに役立つものです。 –

+0

@MikyDinescu:うわー、何か新しいことを知った、ありがとう(そして+1)。 – leppie

+0

それが私たちが大好きな理由です - 私たちはすべて何かを学んでいます;) –

-1

これは可能ですが、ソリューション内のすべての例外に影響します。

Debug -> Exceptions -> Find... "Null Ref"、Thrownをスローします。

+1

もう一度、コードの残りの部分についてその例外を打破する必要がありますが、無視したい場所は1つだけです。 – BrainSlugs83

1

例外が発呼者にバブルアップしないと仮定すると、これはDebuggerHiddenAttributeで実現できます。

Visual Studio 2005のデバッガが でマークされた方法では、この属性を停止しないと、ブレークポイントが 方法で設定することはできません

発言から。

[DebuggerHidden] 
    private static void M() 
    { 
     try 
     { 
      throw new NullReferenceException(); 
     } 
     catch (Exception) 
     { 
      //log or do something useful so as not to swallow. 
     }    
    } 
+0

私は何をしようとしているのですか?[DebuggerNonUserCode]属性と[DebuggerHidden]属性の指定の違いは何ですか? –

+0

@BasedAsFunk - Clarity。コードが隠されていて、例えば生成され、エンドユーザがそれを見てはならないため、DebuggerNonUserCodeはこの意図を識別します。ただし、デバッガで無視される関数を使用する場合は、DebuggerHiddenがその意図を識別します。 –

+3

動作しません。デバッガは1つ上のレベルを停止します。例外は泡立つことはなく、キャッチされていますが、デバッガは動作しているかのように動作します。 (あなたが歩いていくと、泡立ちがないことがはっきりと分かりますが、それでもブレークは起こります.-非常に驚くべきことです。) – BrainSlugs83