2016-06-28 2 views
1
  1. 私のドキュメントの下のデフォルトのプロジェクトフォルダに簡単なデモアプリケーション(app.exe)を作成しました。
  2. pdbファイルをコピーせずに、app.exeをc:\ test \ appフォルダにコピーしました。

私はwindbgの([ファイル]メニュー> [開く実行可能)で、この実行可能ファイルを実行します。私はそれがシンボルファイルを見つけることを期待していませんが、それはありません!windbgが私のパスを明らかにしていないときでも、私のアプリケーションのpdbファイルを見つけました。

私はlmの出力は

0:000> lm 
start end  module name 
013b0000 013b8000 App  C (private pdb symbols) c:\users\username\documents\visual studio 2013\Projects\App\Release\App.pdb 
0f500000 0f571000 MSVCP120 (private pdb symbols) c:\test\symbols\msvcp120.i386.pdb\0B631FCA474F4F6FBBE54C497C5821361\msvcp120.i386.pdb 
0f740000 0f82e000 MSVCR120 (private pdb symbols) c:\test\symbols\msvcr120.i386.pdb\16F5E2EF340A453ABC8B8F67DC6FD8082\msvcr120.i386.pdb 
76860000 768a7000 KERNELBASE (pdb symbols)   c:\test\symbols\wkernelbase.pdb\90BA6126FA6340F1ABFAE58DB8B7FB7D1\wkernelbase.pdb 
769e0000 76af0000 kernel32 (pdb symbols)   c:\test\symbols\wkernel32.pdb\515F42F53681439D989AC0FC08F7F8F72\wkernel32.pdb 
77210000 77390000 ntdll  (pdb symbols)   c:\test\symbols\wntdll.pdb\B5ACAC3B4A6C4515AF416D60366399652\wntdll.pdb 

ある.sympath srv*c:\test\Symbols*https://msdl.microsoft.com/download/symbols

にsympathを設定するので、私が実行している実行可能ファイルは、それがmy documentsフォルダ内のPDBファイルを見つけたんか、c:\test\app\app.exeにありますか?

私はそれがキャッシュされていないことを確認しました。

+0

Oh noesは、動作するツールです。ああ。 –

答えて

5

アプリケーションには、実行可能ファイル自体にPDBファイルへのパスが含まれています。さまざまな方法で表示することができます:

  1. strings app.exe | findstr ".pdb" 
    

    意志出力PDBへのフルパス:Sysinternals Stringsユーティリティで。

  2. 別工具(ビット以上のデバッグに固有の)同様の結果がDebugDirで達成する:WinDbgの自体に

    E:\[...]\DebugDir>DebugDir.exe "E:\[...]\Reporter.exe" 
    File: E:\[...]\Reporter.exe 
    Number of entries in debug directory: 1 
    
    Debug directory entry 1: 
    Type: 2 (CodeView) 
    TimeStamp: 5772e493 Characteristics: 0 MajorVer: 0 MinorVer: 0 
    Size: 120 RVA: 000ba482 FileOffset: 000b8682 
    CodeView format: RSDS 
    Signature: {eac36e37-78c5-47c5-bc95-7c6e5896f694} Age: 1 
    PdbFile: E:\[...]\obj\Debug\Reporter.pdb 
    
  3. 、あるいは!lmi

    0:009> !lmi Reporter 
    [...] 
    Debug Data Dirs: Type Size  VA Pointer 
          CODEVIEW 77, 82cf2, 80ef2 RSDS - GUID: {588CF7EE-FA7C-44F9-850C-382520749BE8} 
           Age: 1, Pdb: E:\[...]\obj\Debug\Reporter.pdb 
        Symbol Type: DEFERRED - No error - symbol load deferred 
        Load Report: no symbols loaded 
    

    を使用し、最初の知りますモジュールのアドレスを取得し、ヘッダをダンプします(これはかなり冗長です)。

    0:009> lm m Reporter 
    start end  module name 
    002c0000 00350000 Reporter (deferred)    
    
    0:009> !dh 002c0000 
    [...] 
    Debug Directories(1) 
        Type  Size  Address Pointer 
        cv   77  82cf2 80ef2 Format: RSDS, guid, 1,  E:\[...]\obj\Debug\Reporter.pdb 
    

あなたは、例えば、この機能をオフにし、コンパイラ/リンカの設定がありますかどうかを確認、パスがあなたの実行可能ファイルの一部にしたくない場合Microsoft Visual C++コンパイラの場合は/pdbpath:noneです。

デバッガは、PDBを見つける代わりに、実行可能ファイルの別のフォルダにPDBを移動したくない場合は

関連する問題