2009-09-14 9 views
7

間違った行番号でお客様からのスタックトレースを受け取ることがあります。それはあまり頻繁ではありませんが、時には私たちを困惑させることもあります。スタックトレース(リリース)のライン番号が間違っています

顧客には、最適化と「pdbのみ」のデバッグ情報を持つリリースアセンブリがあります。

はい、ライン番号とお客様のコードとまったく同じバージョンのコードを比較します。

はい、お客様は正しいpdbファイルを持っています。

そして、この行番号の違いは、メソッドのインライン展開(コンパイラの最適化)では説明できません。

また、私たちはPostSharpのようなAOPツールを使用していません。

なぜそれが起こりますか?

+0

PostSharpなどのAOPツールを使用していますか? –

+1

このヘルプが重複しているかどうかを確認してください:http://stackoverflow.com/questions/492201/exception-error-message-with-incorrect-line-number – Kobi

答えて

7

.netのエキスパートではありませんが、少なくとも他の言語では、高いコンパイラの最適化が選択された場合、コンパイラはコードを大幅に並べ替えることがあります。これにより、エラーの原因を特定の行に固定することが非常に困難になります。コンパイラが基本ブロック間で最適化を行うことができれば、この効果は非常に重要になり、ソースファイルのまったく異なる部分に見かけ上の行位置を置くことができます。

2

コンパイルの最適化をたくさん使うと、コンパイラはあなたのコードの一部を動かすかもしれません。

最もよくデバッグする方法は、クライアントが実際に使用するdllでReflectorを使用することです。 stacktraceの行番号を使用すると、アプリがクラッシュしたときにどのようなコード行が呼び出されるのかがわかります。

+1

リフレクターが私を助ける方法は? 行番号は表示されず、もちろん書式設定は保持されません。 リフレクタは、例外が発生した場所でコードが大きく変更されていないことを示しています。 – xoposhiy

+1

ああ...だからあなたは私が推測しています。ごめんなさい :/ –

関連する問題