3

Windows XP Professional バージョン 2002 Service Pack 3 で Microsoft Visual Studio 2005 Verison 8.0.50727.762 (SP.050727-7600) を使用して、'Foo' という C++ プロジェクトを作成しました。このプロジェクトを Foo.exe にビルドしました。次に、Foo.exe ファイルを Windows Server 2003 Enterprise Edition Service Pack 2 にコピーしました。問題なく動作します。

ここで、WinDbg:6.12.0002.663 X86 バージョン 5.2 を使用してデバッグを試みます。

シンボル パス、ソース パス、またはイメージ パスが設定されていません

[ファイル] > [実行可能ファイルを開くC:\foo\Foo.exe] メニューから開くと、次のエラーが表示されます。

*** ERROR: Symbol file could not be found.  Defaulted to export symbols for ntdll.dll -

Foo.pdb は、Foo.exe が存在する同じフォルダーには存在しません。Foo.exe のエラーが表示されないのはなぜですか?

ld *WinDbg でコマンドを実行すると、次のエラーが表示されます。

0:000> ld *
*** ERROR: Module load completed but symbols could not be loaded for Foo.exe
Symbols loaded for Foo
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for C:\WINDOWS\system32\msvcrt.dll - 
Symbols loaded for msvcrt
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for C:\WINDOWS\system32\kernel32.dll - 
Symbols loaded for kernel32
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for C:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.6195_x-ww_44262B86\MSVCR80.dll - 
Symbols loaded for MSVCR80
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for C:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.6195_x-ww_44262B86\MSVCP80.dll - 
Symbols loaded for MSVCP80
Symbols already loaded for ntdll

ここで、それを修正するための 2 つの試みを示しましょう。1つは機能し、もう1つは機能しませんでした。

Windows Server 2003 Service Pack 2 x86 リテール シンボルのダウンロードが機能しない

http://msdn.microsoft.com/en-us/windows/hardware/gg463028にアクセスして、以下をダウンロードしました。

Windows Server 2003 with Service Pack 2 x86 リテール シンボル、すべての言語(ファイル サイズ: 154 MB - ほとんどの顧客はこのパッケージを必要とします。)

私はそれを実行し、シンボルを にインストールしましたC:\Symbols。WinDbg では、シンボル パスを次のように設定します。

C:\Symbols;C:\MySymbols

C:\MySymbolsFoo.pdb というファイル名を持つ Foo.exe のシンボルが含まれていました。

「ファイル > 実行可能ファイルを開くC:\foo\Foo.exe」メニューから開くと、前のセクションで説明したのと同じエラーが発生しました。

ただし、今回はld *コマンドのエラーが少なくなりました。

0:000> ld *
Symbols loaded for Foo
Symbols loaded for msvcrt
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for C:\WINDOWS\system32\kernel32.dll - 
Symbols loaded for kernel32
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for C:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.6195_x-ww_44262B86\MSVCR80.dll - 
Symbols loaded for MSVCR80
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for C:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.6195_x-ww_44262B86\MSVCP80.dll - 
Symbols loaded for MSVCP80
Symbols already loaded for ntdll

Microsoft Symbol Server を使用すると修正されました

今回はシンボルパスを次のように設定しました。

SRV*C:\MicrosoftSymbols*http://msdl.microsoft.com/download/symbols;C:\MySymbols

今、C:\foo\Foo.exe「ファイル>実行可能ファイルを開く」メニューから開くと、エラーは発生しませんでした。C:\microsoftsymbols\ntdll.pdb\F7024C7F15FE4BEA992FF38BE58AC11C2\ntdll.pdb自動的にダウンロードされていることがわかりました。

今回のld *コマンドもエラーなく正常に実行されました。

0:000> ld *
Symbols loaded for Foo
Symbols loaded for msvcrt
Symbols loaded for kernel32
Symbols loaded for MSVCR80
Symbols loaded for MSVCP80
Symbols already loaded for ntdll

コマンドの実行中に、次の追加のシンボルが自動的にダウンロードされました。

C:\microsoftsymbols\kernel32.pdb\BE496DC9472F4438B080C70594D8F9CC2\kernel32.pdb
C:\microsoftsymbols\msvcp80.i386.pdb\E8A9423E890A4ADDB38F8F756268437C1\msvcp80.i386.pdb
C:\microsoftsymbols\msvcr80.i386.pdb\54C9E2F351544D1CB39517DC4B299EA81\msvcr80.i386.pdb
C:\microsoftsymbols\msvcrt.pdb\A7F38CEE7E684B94B7AA9FFFCAB446851\msvcrt.pdb

質問

  1. シンボル パスが指定されていない場合、Foo.exe のシンボル ファイルに関するエラーが表示されないのはなぜですか?
  2. Windows Server 2003 with Service Pack 2 x86 リテール シンボルをダウンロードし、そのパスをシンボル パスとして指定しても機能しないのはなぜですか?

詳しくは

私の質問に答えるのに役立つ場合は、winmsd.exe > システムの概要から取得したシステムの詳細を次に示します。

OS Name: Microsoft(R) Windows(R) Server 2003, Enterprise Edition
Version: 5.2.3790 Service Pack 2 Build 3790
Other OS Description : Not Available
OS Manufacturer: Microsoft Corporation
System Name: EULER
System Manufacturer: VMware, Inc.
System Model: VMware Virtual Platform
System Type: X86-based PC
Processor: x86 Family 16 Model 4 Stepping 2 AuthenticAMD ~2417 Mhz
Processor: x86 Family 16 Model 4 Stepping 2 AuthenticAMD ~2416 Mhz
BIOS Version/Date: Phoenix Technologies LTD 6.00, 7/22/2008
SMBIOS Version: 2.4
Windows Directory: C:\WINDOWS
System Directory: C:\WINDOWS\system32
Boot Device: \Device\HarddiskVolume1
Locale: United States
Hardware Abstraction Layer: Version = "5.2.3790.3959 (srv03_sp2_rtm.070216-1710)"
User Name: Not Available
Time Zone: India Standard Time
Total Physical Memory: 3,839.45 MB
Available Physical Memory: 1.56 GB
Total Virtual Memory: 5.60 GB
Available Virtual Memory: 3.33 GB
Page File Space: 2.00 GB
Page File: C:\pagefile.sys
4

2 に答える 2

2

シンボル パスが指定されていない場合、Foo.exe のシンボル ファイルに関するエラーが表示されないのはなぜですか?

1 への回答:

windbg が Foo のシンボルを読み込もうとしたときに実行しました

0:000> ld *
   *** ERROR: Module load completed but symbols could not be loaded for Foo.exe
   Symbols loaded for Foo

最初にロードしたときに表示されなかった理由は、windbg が最初に foo のシンボルをロードしようとしなかったためです。最も可能性が高いのは、Foo がまだ呼び出されていないためです。プログラムは起動したばかりで、プログラム ロジックは実際にはまだ呼び出されていません。


Windows Server 2003 with Service Pack 2 x86 リテール シンボルをダウンロードし、そのパスをシンボル パスとして指定しても機能しないのはなぜですか?

2 への回答:

100% 確実とは言えませんが、セキュリティ パッチが適用された可能性が最も高いため、小売シンボルに含まれていた pdb に変更が含まれていませんでした。MS サイトにアクセスすると、パッチが適用されたバージョンを含む、リリースされたすべてのバージョンの DLL のすべてのシンボルを取得できます。

于 2012-01-19T16:19:07.540 に答える
1

シンボル パスが指定されていない場合、Foo.exe のシンボル ファイルに関するエラーが表示されないのはなぜですか?

前の回答は正しいですが、イメージ ファイルにはデフォルトで PDB のビルド場所への参照が含まれていることに注意してください。したがって、WinDBG は、ローカル マシンでビルドしたイメージの PDB を魔法のように見つけることができます。これについては、こちらで詳しく説明しています。

http://analyze-v.com/?p=245

于 2012-01-21T00:15:16.983 に答える