1

さまざまな顧客で実行されている Windows フォーム アプリケーションがあり、エラーが発生した場合はデータベースにログインし、ログに記録されたスタック情報を使用して問題を修正します。

ただし、本番環境でのみ発生する問題があります。たとえば、スタックが表示されます。

CalculateTotals(メソッド名) :NullReferenceException: オブジェクト参照がオブジェクトのインスタンスに設定されていません。

CalculateTotals はメソッド名であり、多くのサブメソッド呼び出しとより多くの行があり、失敗したコードの正確な行番号を取得できません。

私のアプリケーションの PDB ファイルは (インストール時に) 顧客に送信されません。

その .PDB ファイルのコピーを保持し (リモートの場所にあり、インストールの一部にならない可能性があります)、それを使用してエラーをデバッグし、正確な行を取得するにはどうすればよいですか?

4

2 に答える 2

2

必要に応じてリリースに pdb ファイルを含めることができますが、IntelliTraceを使用して、Visual Studio の運用環境からデータをデバッグすることもできます。

つまり、IntelliTrace は次のようになります。

IntelliTrace は、飛行機のブラック ボックスのような役割を果たします。プログラム実行の重要なポイントを追跡し、それらのポイントで何が起こったかを後で再生できるようにします。

これらのブログ投稿をご覧ください。

もちろん、Web を検索して IntelliTrace の詳細を確認することもできます。

于 2012-11-07T19:11:08.360 に答える
1

CLR が実行時に PDB ファイルを見つけることができる場合、例外のスタック トレースで行番号情報のみを取得します。離れた場所からこれを行いたいと思うと、これが難しくなりますが、不可能ではありません。CLR が使用する基礎となる API は DIA (Debug Interface Access) であり、これが Debug API を使用します。

デバッガーでシンボル サーバーを使用するには、デバッグ セッションをセットアップするのと同じ方法でマシンをセットアップする必要があります。Microsoft Symbol Server と同様に、インターネット経由でアクセスできるシンボル サーバーを最初にセットアップする必要があります。次に、そのサーバーを参照するように _NT_SYMBOL_PATH 環境を設定します。これについて説明しているコア MSDN ライブラリ ページは、こちらです。これが機能しない場合、トラブルシューティングが容易ではないことに注意してください。

まったく異なるアプローチは、クラッシュしたプロセスからミニダンプを作成することです。MiniDumpWriteDump() を pinvoke する必要があります。.NET プロセスの適切なミニダンプはあまり小さいものではないことに注意してください。十分なストレージを確保し、それを何らかの方法でマシンに取得するには、配管が必要になります。

于 2012-11-07T19:29:11.037 に答える