25

私は現在、独自のロギングを備えたC#アプリケーションを開発しています。例外がスローされると、例外はリストに保存され、ユーザーはリストビューを介して表示できます。ユーザーがリストビューで例外をクリックすると、例外のスタックトレースがテキストボックスに表示されます。ただし、リモートマシンでプログラムを実行している場合でも、スタックトレースには、アプリケーションがコンパイルされたマシンから元のソースファイルへのファイルパスが表示されます。

例えば:

at C:\Folder1\Folder2\Class1.cs:81
at C:\Folder1\Folder2\Class2.cs:65
at C:\Folder1\Folder1\Class3.cs:21

フォルダなしでソースファイルを表示するだけでいいでしょう...

この動作を変更するにはどうすればよいですか?

ネイティブソリューションはありますか?それとも、単に文字列操作を行う必要がありますか?

4

2 に答える 2

23

おそらく、インストールされたアプリに.pdbファイルがあります。.pdbファイルがないと、ファイルの場所は表示されません。

Windowsサービスの例外スタックトレースで行番号を取得するをご覧ください

pdbなしでスタックトレースに行番号を含めますか?

PDBをバンドルしない限り、アプリケーションから直接行番号のスタックトレースを取得することはできません。

于 2010-01-26T12:19:38.550 に答える
8

ファイルパスは「プログラムデータベース」ファイル(.pdb)に含まれています。このようなファイルはコンパイル中に作成され、これらのファイルのパスはコンパイルマシンの場合と同じです。

インストールから.pdbファイルを削除できますが、この方法では、エラーが発生した行がわからないため、スタックトレースは現在の半分になります。通常、Pdbファイルが添付された本番環境ではコードを実行しません。

「興味深いスタックトレース」を保持したい場合は、を呼び出した後、フォルダ名の文字列置換を行うことを検討できますexceptionObject.toString()

于 2010-01-26T12:23:01.763 に答える