2008-09-03 10 views
16

プロダクションリリースにはいつPDBファイルを含める必要がありますか? Optimize codeフラグを使用する必要がありますが、それが例外から得られる情報にどのように影響しますか?プロダクション用のPDBファイルと「コードの最適化」フラグ

パフォーマンスのメリットが目立つ場合は、最適化を使用したいと思いますが、そうでなければ正確なデバッグ情報が必要です。プロダクションアプリでは通常何が行われますか?

+0

http://blog.vuscode.com/malovicn/archive/2007/08/05/releasing-the-build.aspx –

答えて

19

スタックトレースにソースファイル名と行番号を表示するには、pdb-onlyオプションを使用してPDBを生成します。最適化はPDB生成とは別のものです。つまり、パフォーマンスヒットなしで PDBを最適化できます。

あなたが/デバッグを使用する場合the C# Language Referenceから:フル:フル、速度とJIT最適化されたコードのサイズおよび/デバッグとコードの品質上の小さな衝撃に何らかの影響があることに注意してください。我々は/ debugを推奨します:リリースコードを生成するためのpdbonlyまたはPDBなし。

3

ディストリビューションには含める必要はありませんが、間違いなくビルドして保管する必要があります。さもなければ、クラッシュダンプをデバッグすることは事実上不可能です。

また、最適化を有効にします。デバッグをより困難にする一方で、アプリケーションの性質によってパフォーマンスの向上は通常はほとんどありません。一部のアルゴリズムでは、リリース対デバッグビルドの10倍以上のパフォーマンスが容易にわかります。

+0

のオプションの比較を参照してください。PDBを本番環境にコピーすることは、少なくともウェブサイト)。 を参照してください。http://stackoverflow.com/questions/933883/are-there-any-security-issues-leaving-the-pdb-debug-files-on-the-live-servers 最近、PDBにシンボルサーバのような別の場所にそれらを置く必要はありません –

16

最初の質問に答えるには、例外レポートの行番号が必要な場合のみ、本番リリース用のPDBを含める必要があります。

2番目の質問に答えるには、PDBで「最適化」フラグを使用することは、いずれもstack "collapse" will be reflected in the stack traceを意味します。報告された実際の回線番号が間違っているかどうかは分かりません。

あなたの3番目の質問に答えるには、どちらの世界でも最高のやり方をすることができます。デフォルトのデバッグビルドとデフォルトのリリースビルドの主な違いは、デフォルトのリリースビルドを実行すると最適化がオンになり、デバッグシンボルが生成されないことです。だから、4つのステップで:

  1. デバッグシンボルを発するようにご使用のリリースの設定を変更し

    。これはアプリのパフォーマンスにはほとんど影響を与えません。アプリのリリースビルドをデバッグする必要がある場合はいつでも便利です。最適化、すなわちデバッグシンボルとを新しいリリースビルドの設定を使用して

  2. コンパイル。コードの最適化の99%は、JITコンパイラで行われ、言語コンパイラでは行われません。

  3. xxxx.exe.ini(またはdllなど)という名前のアプリケーションのフォルダにテキストファイルを作成します。ここで、xxxxは実行可能ファイルの名前です。このテキストファイルは、最初は次のようになります。

    [.NET Framework Debugging Control] 
    GenerateTrackingInfo=0 
    AllowOptimize=1 
    
  4. これらの設定では、アプリはフルスピードで実行されます。あなたは(CIL)コードの最適化をデバッグ追跡をオンにすると、おそらくオフにすることで、あなたのアプリケーションをデバッグしたい場合は、単に次の設定を使用します。

    [.NET Framework Debugging Control] 
    GenerateTrackingInfo=1 
    AllowOptimize=0 
    

EDITをCATEYEさんのコメントによると、this can also work in a hosted environmentをASPなど。ネット。

+0

> 2番目の質問に答えるには、PDBで「最適化」フラグを使用する>は、行番号が数行だけずれている可能性があることを意味します。 これは本当ですか? – Karsten

+0

いいえ、わかりません。私は確信している違いを反映するために私の答えを修正しました(スタック崩壊)。私は、ライン差の理論をより詳細に調べる必要があります。 – RoadWarrior

+0

あなたのソースを特定する必要があります - Scott Hanselman http://www.hanselman.com/blog/DebugVsReleaseTheBestOfBothWorlds.aspx –

関連する問題