C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

リリースビルド実行中に行番号を取得する

[トピック内 2 記事 (1 - 2 表示)]  << 0 >>

■92474 / inTopicNo.1)  リリースビルド実行中に行番号を取得する
  
□投稿者/ から (1回)-(2019/09/29(Sun) 19:23:29)

分類:[.NET 全般] 

プログラム実行中に例外が発生した場合に、
どこで例外が発生したか知るために、
例外発生時に行番号を保存する機能を付けたいと考えています。


http://rucio.a.la9.jp/main/dotnet/Samples/dnSampleGetFileLineNumber.htm

MsgBox(New StackFrame(True).GetFileLineNumber)

を使うことで、デバッグ中の場合には、
取得できることは分かったのですが
リリースビルドを実行中には取得できないのでしょうか?

ソースコード無しでEXEファイルだけ人に渡して
例外発生時に例外箇所をLogファイルに保存するようなことってできませんか?

引用返信 編集キー/
■92476 / inTopicNo.2)  Re[1]: リリースビルド実行中に行番号を取得する
□投稿者/ Azulean (1087回)-(2019/09/29(Sun) 22:01:44)
No92474 (から さん) に返信
> プログラム実行中に例外が発生した場合に、
> どこで例外が発生したか知るために、
> 例外発生時に行番号を保存する機能を付けたいと考えています。

行番号までなくても、メソッドの呼び出し履歴や発生した例外、そのメッセージからある程度想像できることが多いとは思いますが、巨大なメソッドが多い…という感じですか?


> MsgBox(New StackFrame(True).GetFileLineNumber)
> を使うことで、デバッグ中の場合には、
> 取得できることは分かったのですが
> リリースビルドを実行中には取得できないのでしょうか?

バイナリファイルのどこの行かを知るためには PDB ファイルが一緒に存在することが必要です。
ただし、リリースビルドでは最適化の都合で、常に行番号が取得できるとは限りません。
http://dotnet.kiyochan.jp/article/177124366.html


> ソースコード無しでEXEファイルだけ人に渡して
> 例外発生時に例外箇所をLogファイルに保存するようなことってできませんか?

先にも書きましたように、最適化の影響もあるので、ソースコードの行と一対一で対応づけるのは難しいと思います。
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ