リリースモードで.NETアセンブリのスタックトレースに行番号を表示する
-
06-07-2019 - |
質問
リリースモードでビルド/デプロイされた.NETアセンブリのスタックトレースに行を表示する方法はありますか?
更新:
私のアプリケーションは、3つのクラスライブラリプロジェクトと1つのASP.NET" website"に分かれています。プロジェクト。私が追跡しようとしているエラーは、3つのクラスライブラリプロジェクトの1つにあります。 「オブジェクトのインスタンスに設定されていないオブジェクト参照」を生成しているクラスライブラリプロジェクトのpdbファイルのみをデプロイしました。エラー。
行番号はスタックトレースにまだ表示されていません。スタックトレースの行番号を取得するには、すべてのプロジェクトのpdbファイルをデプロイする必要がありますか?
実用的なソリューション
各アプリケーションにpdbファイルをデプロイすると、行番号の問題が修正されました。
解決
- スタックトレースの行番号を表示するプロジェクトの[プロパティ]ウィンドウに移動します。
- ビルド"垂直タブ"をクリックします。
- 「リリース」を選択します;構成。
DEBUG定数パラメーターを確認します。 - 「コードを最適化する」のチェックを外しますパラメータを使用して、インラインコードで不定期に発生するトレースの問題を回避します(この手順は必須ではありません)。
- [詳細...]ボタンを押して、[出力]を選択します->デバッグ情報-> pdbのみ。
- 生成された.pdbファイルをアセンブリと共に展開します。
以下のコメントを実装:
- 確認すべきもう1つのことは、「Package / Publish Web」にあります。 「生成されたデバッグシンボルを除外する」セクションチェックボックスもオフになっています
他のヒント
VS2012では、「生成されたデバッグシンボルを除外する」のチェックを外す必要があります。プロパティの[パッケージ/ Webの公開]セクションでも同様です。
私の解決策
実行可能ファイルと同じフォルダーにpdbファイルをコピーします。
exeファイルを実行すると、行番号を表示できるようになりました。
これが理由
http://msdn.microsoft。 com / en-us / library / ee416588%28v = vs.85%29.aspx
過去に問題が発生し、エラーを追跡するためにリリースビルドでPDBファイルを展開する必要があると感じました。理由は、あなたが言ったように、非常に大きなメソッドで例外が発生し、それが起こっている場所を正確に特定できなかったからです。
これは、メソッドをより小さく、より詳細なメソッドにリファクタリングする必要があることを示している可能性があります。 1つのサイズがすべての答えに適合するわけではありませんが、このアプローチは短期間(リファクタリング中にバグを頻繁に発見しました)および長期的には役立ちました。
考えてみてください。
ビルド/デプロイメントパッケージにデバッグシンボルを含めます。
VS 2008 Expressでは、[プロジェクトのプロパティ]で見つけました->コンパイル->高度なコンパイルオプション。
これは毎回機能します。スタックトレースメッセージのサブストリングを作成するだけです。本当に簡単!また、vb.netでは、「すべてのファイルを表示」を行う必要があります。 pdbを含めます。
'Err is the exception passed to this function
Dim lineGrab As String = err.StackTrace.Substring(err.StackTrace.Length - 5)
Dim i As Integer = 0
While i < lineGrab.Length
If (IsNumeric(lineGrab(i))) Then
lineNo.Append(lineGrab(i))
End If
i += 1
End While
'LineNo holds the number as a string
C#バージョン:
string lineGrab = error.StackTrace.Substring(error.StackTrace.Length - 5);
int i = 0;
int value;
while (i < lineGrab.Length)
{
if (int.TryParse(lineGrab[i].ToString(), out value))
{
strLineNo.Append(lineGrab[i]);
}
i++;
}