1

私が担当しているコード内では、いくつかの 'throw new Exception()' メソッドが飛んでいます。

問題は、catch常に最適な場所にあるとは限らず、同じクラスにあるとは限らないことです。これは、エラーをキャッチしたときに、どこで発生したかがわからないことを意味します。または、発生したthrowとしても、各クラスに数百/数千行のコードが存在する可能性があります。

そのため、メッセージ内で、throwデバッグのために、クラス名、プロジェクト名、メソッド名、および行番号を記載すると、ナビゲーションが容易になる場合があります。行番号は難しいです。コードを修正するとすぐに同じ行に残る可能性が低いため、ハードコーディングすることはできません。

だから、私の 2 つの質問は
1) 私たちはこのアイデアが好きですか、それともいいえだと思いますか? もっと良いアプローチがあります!
2) 行番号を取得する方法はありますか?

4

6 に答える 6

2

System.Diagnostics の下にある StackTrace 情報を調べてみましたか? 例は次の場所にあります。

http://msdn.microsoft.com/en-us/library/system.diagnostics.stacktrace.aspx

于 2012-06-07T14:58:26.490 に答える
0

デフォルトのパラメーターと組み合わせたC#5.0機能を使用して、発信者の回線番号を取得できます。したがって、例外を直接作成してスローするのではなく、例外を作成するメソッドを作成します。

Exception CreateMyException(
    [CallerFilePath] string filePath = "", 
    [CallerMemberName] string memberName = "",
    [CallerLineNumber] int lineNumber = 0)
{
   return new Exception(string.Format("Exception thrown from line {0} in member {1} in file {2}",
       lineNumber, memberName, filePath));
}

...コードの他の場所...

throw CreateMyException();  // compiler injects current values for defaulted arguments.
于 2012-06-08T19:01:15.657 に答える
0

この情報は通常、スタック トレースで入手できます - Jeremy による (私のコメントを参照)。

コメントを正解としてマークする方法がわかりません!?

于 2012-06-07T15:05:50.437 に答える
0

またはと同じディレクトリにデバッグ シンボル (.pdb)ファイルを含めると、それらが自動的に読み込まれ、..dll.exeexception.StackTrace

シンボルをビルドするには、リリースビルド設定のAdvanced Build Settingsで、Debug InfoFullにします。

高度なビルド設定

于 2012-06-07T14:56:33.620 に答える
0

System.Diagnostics.StackFrame行番号を取得するためのクラスを見てください。私はその方法GetFileLineNumberがあなたを助けるかもしれないと信じています

http://msdn.microsoft.com/en-us/library/system.diagnostics.stackframe

于 2012-06-07T15:03:46.137 に答える
0

リリース モードでコンパイルされたコードでは、行番号は表示されません。これが社内アプリケーションであり、行番号が本当に必要な場合は、いつでもデバッグ モードでコンパイルされたコードをデプロイしてから、PDB をアセンブリと共にデプロイできます。ただし、これにはパフォーマンス コストも伴うため、これが常に最適なアプローチであるとは限りません。ただし、この時点でより良いアプローチがあるかどうかはわかりません。

私の記憶が正しければ、Roslyn プロジェクトは行番号を取得するためのより良い方法を提供してくれますが、詳細を説明するには十分に慣れていません。

于 2012-06-07T15:08:48.747 に答える