2009-04-20 8 views
21

DLL(リリースモードでビルドされたもの)と対応するPDBファイルを使用している場合、デバッグ(ステップイン)することは可能ですか?そのDLL?DLLのリリースバージョンのデバッグ(PDBファイルの場合)

必要な手順/設定(PDBファイルの保存先など)は何ですか?

編集:

(簡単なコンソールテストアプリケーションのbinに/ debugディレクトリにある)DLLと同じ場所にPDBファイルを持っている場合。 DLLのシンボルが(出力ウィンドウとモジュールウィンドウにも)読み込まれているのがわかりますが、そのDLLのメソッドにステップインできません。

これはコンパイラの最適化の結果である可能性がありますか?

答えて

5

は私が最終的にリリース構成で構築されたDLLをデバッグする問題が発生するものが見つかりました:すべての

まず予想通り、それは基本的に動作します。つまり、リリース構成に対応するPDBファイルに加えてDLLが組み込まれている場合、そのDLLに含まれるクラス/メソッドをデバッグできます。

私が最初に試したとき、私は残念なことに、DebuggerStepThroughAttribute、eを持つクラスのメソッドにステップインしようとしました。G:(意図された/期待されるように)その場合

[System.Diagnostics.DebuggerStepThrough] 
public class MyClass { 
    public void Test() { ... } 
} 

、デバッガからメソッドにステップすることはもちろん不可能です。

すべてが意図どおりに動作します。あなたの答えに感謝します。

14

pdbは、(intellisense xmlファイルのように)dllの隣にある場合、通常(少なくとも私にとっては)検出されます。あるいは、モジュールがロードされた後でブレークポイントが必要になります。

ブレークポイントで、「モジュール」ウィンドウ(Ctrl + D、M-またはデバッグ→Windows->モジュール)を表示します。 "シンボルをロードする"、 "シンボルパス"などを右クリックしてください。

+2

PDBはDLLの隣にあり、シンボルがロードされていますが、まだそのメソッドにステップインできません。何か案が? – M4N

5

はい、PDBでリリースコードをデバッグできます。しかし、最適化されたコードのデバッグにはいくつかの落とし穴があります。詳細はherehereです。

あなたのPDBは、デバッガが見つけることができる場所に置かれていればよく、dllと同じディレクトリが通常最も簡単です。それ以外の場合は、デバッガがその場所を見つけることができる場所に置き、デバッガをその場所にシンボルパスで指定します。

2

リリースビルドをデバッグすることは、通常、デバッグバージョンをデバッグする方がはるかに難しくなります。一般的には、x86アセンブラを理解している必要があります。逆アセンブリウィンドウを調べるのに時間がかかるでしょう。これは、リリースビルドではコンパイラの最適化が重要なインライン化と命令の並べ替えを行う可能性があるので、実際にどのコード行を使用しているかを調べる唯一の方法です。また、デバッガが変数の値を正しく報告しないことが頻繁にあります。変数の値を知る必要があり、デバッガが正しいかどうかわからない場合は、逆アセンブリウィンドウに移動して、メモリの場所またはレジスタを探します。

pdbファイルはSymbol Serverに格納できます。良いチュートリアルについてはSetting up a Symbol Serverをチェックしてください。ビルドマシンでビルドするすべての製品は、Symbianサーバーにシンボルを公開するので、WinQualから受け取ったクラッシュダンプはいつでもデバッグできます。

関連する問題