try-catch正しい異常な位置を見つけることができない、私は2つの効果的なテクニックをお勧めします

最初の宇宙開発のIDEのVisual Studioデバッガは、私たちは多くの問題を解決するため、通常はデバッグの助けを働いて、非常に強力です。共有の例外は、今日の問題の一部を解決するために希望を2つの先端を捕捉します。
以下の2つのケースでは、私たちが遭遇すると信じています。

  • 異常が発生した場合に1のtry-catch文は、使用されていない位置に直接、キャッチジャンプのtry-catchキャッチ例外を使用して、自動的に見つけていない場合、自動的に例外ポイントにジャンプすることが可能です位置エラーコード。
  • 2.のtry-catch多層メソッド呼び出し、及び、位置エラーコードを直接見ることができません。

ヒント1:例外コードの位置を自動的に配置します

質問1の場合、結果は、我々は、エラーコードが表示されますがある場合、ほとんど、直接見つけるためにどこに、我々はより迅速に問題に対処できるように、コードの行、私は、一目で見ることができた上で異常が欲しいということです。
この場合質問1、その現れでは、単純にどのような異常Aのヌル参照を再現

namespace ExceptionSample
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                Random random = null;
                Console.WriteLine(random.Next());
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
            Console.ReadLine();
        }
     }
}     

上記の例外コードNullReferrenceException、デバッグモードでは、本明細書catchステートメントにジャンプします。あなたはただこれだけのオブジェクトのように、......これは非常に単純だと思うかもしれません実際に練習することができますか?
ここに画像を挿入説明
実用的な仕事でよりランダムターゲット、コードの複雑さ、マルチターゲット十分ではなく、数十が存在することができる、それはエラーコードが異常で見つけるのは難しいです。スタックトレースにその関数呼び出しにナビゲートすることができます間違っていた、とどこコードが間違っのライン見つけることができません。
デバッグ「ウィンドウ」の設定に異常な設定で、Visual Studioのメニューバーを通じてこの問題を解決するには。:以下に示すように
ここに画像を挿入説明
、共通言語ランタイム例外シングルボックス以下の例外のチェック。もう少し、いくつかの変更を設定する前に。
今、私たちは、例外をキャッチするのtry-catchステートメントを使用する前に、コードを見て、彼らは、エラーコード、次の図の場所に直接見つけます:

       static void Main(string[] args)
        {
            try
            {
                Random random = null;
                Random random1 = new Random();
                Random random2 = new Random();
                Random random3 = new Random();
                Console.WriteLine(random1.Next());
                Console.WriteLine(random2.Next());
                Console.WriteLine(random3.Next());
                Console.WriteLine(random.Next());
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
            Console.ReadLine();
        }

ここに画像を挿入説明

ヒント2:通常のスロー姿勢

还是之前的一个方法,我已经将异常设置回复默认了。

        static void Main(string[] args)
        {
            try
            {
                Random random = null;
                Console.WriteLine(random.Next());
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.Write(ex);
                throw ex;
            }
        }

我们再输出中可以看到(ps:项目名称用的之前的,不介意哈)
ここに画像を挿入説明
错误的代码在16行。可实际工作中的情况并不是这样简单,基本上是A方法调用B方法,B方法调用C方法,代码如下所示:
在Main方法中调用ThrowNullReferrence(),方法ThrowNullReferrence中调用SetNullReferrence()。代码变复杂后,一层嵌套一层。这个时候能正确显示出代码异常的位置吗?

        static void Main(string[] args)
        {
            try
            {
                ThrowNullReferrence();
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.Write(ex);
                throw ex;
            }
        }
        public  static void ThrowNullReferrence()
        {
            try
            {
                SetNullReferrence();
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.Write(ex);
                throw ex;
            }
        }
        public static void SetNullReferrence()
        {
            try {
                Random random = null;
                Console.WriteLine(random.Next());
            }
            catch(Exception ex)
            {
                System.Diagnostics.Debug.Write(ex);
                throw ex;
            }
        }

我们可以通过下图看到:
ここに画像を挿入説明
System.NullReferenceException: 未将对象引用设置到对象的实例。
在 ExceptionSample.Program.SetNullReferrence() 位置 D:\Learn\延迟加载\LinqLayzLoad\LinqLayzLoad\Program.cs:行号 39System.NullReferenceException: 未将对象引用设置到对象的实例。
在 ExceptionSample.Program.SetNullReferrence() 位置 D:\Learn\延迟加载\LinqLayzLoad\LinqLayzLoad\Program.cs:行号 44
在 ExceptionSample.Program.ThrowNullReferrence() 位置 D:\Learn\延迟加载\LinqLayzLoad\LinqLayzLoad\Program.cs:行号 27System.NullReferenceException: 未将对象引用设置到对象的实例。
在 ExceptionSample.Program.ThrowNullReferrence() 位置 D:\Learn\延迟加载\LinqLayzLoad\LinqLayzLoad\Program.cs:行号 32
在 ExceptionSample.Program.Main(String[] args) 位置 D:\Learn\延迟加载\LinqLayzLoad\LinqLayzLoad\Program.cs:行号 15

ライン39のエラーコードの場所は、より多くの珍しい場所を投げるあります。
それは原因は?
あなたが投げるしたい場合は、キャプチャキャッチした後、あなたは新しい例外オブジェクトを再インスタンス化する必要があり、その後にように、例外はもちろん、完全なスタック情報が含まれ、完了したキャッチする最外層の方法を投げます位置エラーコードを配置します。
使用する新しい例外をスロー
、変換後、図の例をに正確な位置決め
ヌル基準線39が異常である
Console.WriteLineを(random.Next())。
ここに画像を挿入説明

エピローグ

「より多くのコーディング、デバッグ少ない」:前に見た親指プログラマの古いルールを共有します

おすすめ

転載: www.cnblogs.com/zhangmumu/p/12007159.html