pdb には、デバッガーがスタックを正しく読み取るために必要な情報が含まれています。スタック トレースには、pdb があるモジュール内のスタック フレームの行番号とシンボル名が含まれます。
使用例を2つ紹介します。最初は明白な答えです。2 番目は、ソース インデックス付きの pdb について説明します。
使用例その1…
呼び出し規則とコンパイラが使用した最適化によっては、pdb を持たないモジュールを介してデバッガがスタックを手動でアンワインドできない場合があります。これは、特定のサードパーティ ライブラリや、OS の一部でも発生する可能性があります。
Windows OS 内でアクセス違反が発生したシナリオを考えてみましょう。OS コンポーネントは、デバッガーを混乱させる特別な呼び出し規則を使用するため、スタック トレースは独自のアプリケーションに巻き戻されません。パブリック OS pdb をダウンロードするようにシンボル パスを構成すると、スタック トレースがアプリケーションに展開される可能性が高くなります。これにより、独自のコードが OS システム コールに渡した引数を正確に確認できます。(およびサードパーティのライブラリ内または独自のコード内の AV の同様の例)
使用例その2・・・
Pdb には、別の非常に便利な特性があります。Microsoft が「ソース インデックス作成」と呼ぶ機能を使用して、一部のソース管理システムと統合できます。ソース インデックス付き pdb には、コンポーネントのビルドに使用された正確なファイル バージョンをソース管理から取得する方法を指定するソース管理コマンドが含まれています。Microsoft のデバッガーは、コマンドを実行してデバッグ セッション中にファイルを自動的にフェッチする方法を理解しています。これは、デバッグ エンジニアがソース ツリーを特定のビルドの正しいラベルに手動で同期する必要がなくなる強力な機能です。これは、リモート デバッグ セッションやクラッシュ ダンプの事後分析に特に役立ちます。
「Windows 用デバッグ ツール」インストール (windbg) には、srcsrv.doc という名前のドキュメントが含まれています。これは、srctool.exe を使用して、特定の pdb でソース インデックスが作成されているソース ファイルを特定する方法を示す例を提供します。
「どうすればわかるのか」という質問に答えるために、デバッガーの「モジュール」機能を使用すると、対応する pdb を持つモジュールを知ることができます。windbg では、「lml」コマンドを使用します。Visual Studio で、デバッグ メニューのどこかからモジュールを選択します。(申し訳ありませんが、現在のバージョンの Visual Studio が手元にありません)