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

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

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

Re[3]: EXE実行時のエラー行番号について


(過去ログ 110 を表示中)

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

■65116 / inTopicNo.1)  EXE実行時のエラー行番号について
  
□投稿者/ takaakiiwai (1回)-(2013/02/06(Wed) 17:45:06)

分類:[VB.NET/VB2005 以降] 

VB2005で作成したプログラムにて、
例外発生時に「ex.ToString()」をログ出力する機能があります。

デバッグ実行した際は、例外が発生した行番号が正しく出力されるのですが、
ビルド後、EXE実行した際は、行番号が不正です。
デバッグ実行時より少ない行番号になります。

今回はたまたま例外が特定できたので問題ないのですが、
今後、EXE実行時に他の例外処理で出力されたログのエラー行番号から、
発生元が特定できないのでは?と懸念しています。

どうして、デバッグ実行時とEXE実行時でエラー行番号が異なるのか、
EXE実行時のエラー行番号から、発生元の特定方法等、ご存知の方いらっしゃいませんか?

以上、よろしくお願いいたします。

引用返信 編集キー/
■65117 / inTopicNo.2)  Re[1]: EXE実行時のエラー行番号について
□投稿者/ オショウ (61回)-(2013/02/06(Wed) 17:51:40)
> どうして、デバッグ実行時とEXE実行時でエラー行番号が異なるのか、
> EXE実行時のエラー行番号から、発生元の特定方法等、ご存知の方いらっしゃいませんか?

  行番号は、諦めて下さい。

  ただ、EXE実行とは、リリースビルド版を指示していますか?
  それともデバッグビルド版のままですか?

  統合環境でのデバッグ実行は、デバッグビルドの場合、同じ情報
  が出力されるはずだったと記憶しておりますが・・・

※ 違ったかな?

以上。
引用返信 編集キー/
■65119 / inTopicNo.3)  Re[2]: EXE実行時のエラー行番号について
□投稿者/ takaakiiwai (2回)-(2013/02/06(Wed) 18:14:05)
> 行番号は、諦めて下さい。

了解しました。残念です。


>ただ、EXE実行とは、リリースビルド版を指示していますか?
>それともデバッグビルド版のままですか?

リリースビルド版のことです。
ちなみに、デバッグビルド版で実行しても、リリースビルド版と同様に、
正しい行番号が取得できませんでした。

ご回答ありがとうございました。

引用返信 編集キー/
■65121 / inTopicNo.4)  Re[3]: EXE実行時のエラー行番号について
□投稿者/ howling (181回)-(2013/02/06(Wed) 18:28:41)
No65119 (takaakiiwai さん) に返信
> リリースビルド版のことです。
> ちなみに、デバッグビルド版で実行しても、リリースビルド版と同様に、
> 正しい行番号が取得できませんでした。

あれあれ?デバッグビルド版で実行したのであれば、大丈夫なはずですが…?
本当に今コンパイルしたファイルを参照できているのでしょうか?
デバッグ情報がおかしくなっているようにしか思えないのですが…。

できれば、簡単なサンプルコードが提示できると良いのですが、可能でしょうか?

引用返信 編集キー/
■65125 / inTopicNo.5)  Re[1]: EXE実行時のエラー行番号について
□投稿者/ Jitta (27回)-(2013/02/06(Wed) 21:53:16)
Jitta さんの Web サイト
No65116 (takaakiiwai さん) に返信

> デバッグ実行した際は、例外が発生した行番号が正しく出力されるのですが、
> ビルド後、EXE実行した際は、行番号が不正です。
> デバッグ実行時より少ない行番号になります。

「少ない行番号」というのが気になりますが。。。
たとえば、日本語を英語に翻訳(コンパイル)したとき、元の日本語と英語がそのまま対応するわけではないですよね。
同じように、ソースと実行コードが一致することはありません。
また、通常、コンパイルするときに実行速度やメモリ使用効率を考えて、効率的な形に置き換えられるため、余計に対応しなくなります。
デバッグ実行では、実行コードとソースの位置についての対応を取るための情報が作られます。
「最適化」を行わず、このデバッグ情報を一緒に配布するなら、ある程度は一致した情報を取得することができます。

ただ、そうすると配布するファイルがばかでかくなるので、通常はクラスとメソッド名を記録するようにします。
引用返信 編集キー/
■65127 / inTopicNo.6)  Re[2]: EXE実行時のエラー行番号について
□投稿者/ Azulean (92回)-(2013/02/06(Wed) 22:37:12)
通常、デバッグビルドであれば exe を直接実行した場合でも行番号は一致してくれるはずです。
デバッグビルドではないものを勘違いしているか、デバッグビルドになぜか最適化が設定されているのかもしれません。


No65125 (Jitta さん) に返信
> また、通常、コンパイルするときに実行速度やメモリ使用効率を考えて、効率的な形に置き換えられるため、余計に対応しなくなります。
> デバッグ実行では、実行コードとソースの位置についての対応を取るための情報が作られます。
> 「最適化」を行わず、このデバッグ情報を一緒に配布するなら、ある程度は一致した情報を取得することができます。

念のため。
VS2005 からはリリース構成でもデフォルトでデバッグ情報(pdb)が生成されます。
pdb ファイルが exe と同じフォルダーにあるなどの条件を満たせば、ファイル名・行番号は表示されます。

もっとも、最適化がなされているので、インラインメソッドになっていて行番号がずれることがあること、pdb ファイルのサイズが大きいことからユーザーに配布することはないでしょうけれども…。

// 「最適化を行うとデバッグ情報が生成されない」と書かれているととらえて、そうではないことを補足する意図の投稿です。
引用返信 編集キー/
■65130 / inTopicNo.7)  Re[3]: EXE実行時のエラー行番号について
□投稿者/ takaakiiwai (3回)-(2013/02/07(Thu) 10:06:46)
皆様、ご回答ありがとうございます。

デバッグビルド版を勘違いしておりました。
構成マネージャにて、構成をデバッグにしてビルド後に実行すると、
エラー行番号は確かに一致しました。

お騒がせして申し訳ありません。

ただ、ご指摘の通り、配布ファイルが大きくなるため、
行番号の取得は諦めます。

解決済み
引用返信 編集キー/


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

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -