5

Visual Studio のように MFC ソース コードにステップ イン/スルーできるようにするには、Windbg でどのような設定を行う必要がありますか?

4

1 に答える 1

11

MFC ソース コードにステップ インするには、正しい MFC シンボルをロードすることと、正しいソース パスを設定することの 2 つが必要です。

MFC 記号

Windbg でシンボル パスを設定するための一般的なアドバイスは、 を使用すること.symfixです。これにより、パブリック Microsoft シンボル サーバーがシンボル パスに追加されます。これにより、Windbg は、MFC DLL を含む多くの Windows DLL の PDB を Microsoft からダウンロードできます。ただし、これらの PDB には、ソースのステッピングに必要なプライベート シンボルが含まれていません。

代わりに、Visual Studio でインストールされたプライベート シンボル PDB を最初に検索し、次にシンボル サーバーを検索するように Windbg に指示する必要があります。

.sympath c:\windows\symbols\dll
.symfix+ c:\symbols

または、ファイル > シンボル ファイル パス...ダイアログにコピー アンド ペーストする場合は、次を使用します。

c:\windows\symbols\dll;srv*c:\symbols*http://msdl.microsoft.com/download/symbols

指定されたc:\symbolsパス.symfix+は、サーバーからダウンロードした PDB のキャッシュされたコピーを保存する場所を Windbg に指示します。

Windbg ( windbg app.exe) を使用して MFC アプリを起動し、MFC シンボルを強制的に読み込み、出力を確認することで、正しい PDB が見つかったことを確認できます (これは Windbg コマンド セッションのログです)。

0:000> $$ setup the correct sympath
0:000> .sympath c:\windows\symbols\dll;srv*c:\symbols*http://msdl.microsoft.com/download/symbols
Symbol search path is: c:\windows\symbols\dll;srv*c:\symbols*http://msdl.microsoft.com/download/symbols
Expanded Symbol search path is: c:\windows\symbols\dll;srv*c:\symbols*http://msdl.microsoft.com/download/symbols

0:000> $$ find the MFC DLL's full path
0:000> lm fm mfc*
start    end        module name
528e0000 52fa2000   mfc100d  C:\Windows\SysWOW64\mfc100d.dll
72390000 7239d000   MFC100ENU C:\Windows\SysWOW64\MFC100ENU.DLL

0:000> $$ force the symbols to load
0:000> .reload /f C:\Windows\SysWOW64\mfc100d.dll

0:000> $$ check for "private pdb symbols"
0:000> lm m mfc*
start    end        module name
528e0000 52fa2000   mfc100d    (private pdb symbols)  c:\windows\symbols\dll\mfc100d.i386.pdb
72390000 7239d000   MFC100ENU   (deferred)             

mfc100d 行にプライベート pdb シンボルが含まれていることに注意してください。最後のコマンドにprivatemfc100d (pdb symbols)という単語が表示されていない場合は、正しい PDB が読み込まれておらず、MFC ソースにステップ インできません。あなたの同情心をもう一度見てみてください。また、コマンドをオンにして実行し、PDB のロードに関する詳細な診断を確認することもできます。!sym noisy.reload /f mfcdllpath

MFC ソース パス

デフォルトの Visual Studio インストールを行った場合、MFC (および C ランタイム) ソースは次の場所にあります。

C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\src\atl
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\src\mfc
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\src\mfcm
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\crt\src

VS2010用。過去のバージョンは、同様のディレクトリ レイアウトを持っています。次の方法で設定できます。

.sympath C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\src\atl;C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\src\mfc;C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\src\mfcm;C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\crt\src;

.sympathまたは、上記の行 ( なし) を[ファイル] > [ソース ファイル パス... ] ダイアログにコピー アンド ペーストします。

これらのディレクトリが存在しない場合は、Visual Studio が MFC ソース コードを認識している場所を確認できます。

VS2010 (およびおそらく 2012):

  • Visual Studio を起動
  • プロジェクトを開く
  • [プロジェクト] メニューで、[プロパティ] を選択します。
  • 左ペインで、[構成プロパティ] を展開し、[VC++ ディレクトリ] を選択します。
  • 右側のペインで、ソース ディレクトリの値を確認します。

VS2008 以前

  • Visual Studio を起動
  • [ツール] メニューで、[オプション] を選択します。
  • 左ペインで、[プロジェクトとソリューション] を展開し、[VC++ ディレクトリ] を選択します。
  • 右側のペインで、ソース ディレクトリの値を確認します。
于 2013-02-22T18:56:50.260 に答える