WinDbg zeigt nicht nützliche Informationen
Lassen Sie mich zunächst sagen, ich bin ein total WinDbg noob, so könnte dies eine einfache Frage...
Ich habe eine Anwendung ("Anwendung" - Namen geändert zum Schutz der unschuldigen!) ich bin versucht zu Debuggen, weil es eine Ausnahme zu werfen. Dies geschieht nur auf Benutzer-Maschinen - ich habe nicht in der Lage zu reproduzieren, auf meinem Entwicklungsrechner. Also habe ich DebugDiag auf die Benutzer-Maschine und erfasst einen Vollständigen Dump. Dann lud ich den dump in WinDbg und hat eine analyze -v
und ein kp
zu versuchen, herauszufinden, was Los war... aber keiner von diesen scheinen mir die Informationen, die ich Suche - die Funktion (und hoffentlich auch die Nummer der Zeile) der Zeile, die das problem verursacht... ich glaube, ich habe die symbol Datei geladen wurde, indem Sie den Pfad zu 'MyApp.pdb' in die Symbol-Datei-Pfad:
srv*c:\symcache*http://msdl.microsoft.com/download/symbols;srv*c:\symcache*C:\dev\Customer\MyAppSln\MyApp\Debug
Erste, hier ist die Ausgabe von kp
:
0:004> kp ChildEBP RetAddr WARNUNG: Stapel entspannen Informationen nicht zur Verfügung. Folgende frames kann wrong. 0502f474 7c347966 Anwendung!DllMain+0x3e8a6 0502f4bc 7c3a2448 msvcr71!_nh_malloc(unsigned int size = <Memory access error>, int nhFlag = <Memory access error>)+0x24 [f:\vs70builds\3052\vc\crtbld\crt\src\malloc.c @ 117] 0502f57c 7c3416b3 msvcp71!std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >::_Tidy(bool _Built = <Memory access error>, unsigned int _Newsize = <Memory access error>)+0x45 [f:\vs70builds\3077\vc\crtbld\crt\src\xstring @ 1520] 0502f610 7c3a32de msvcr71!_heap_alloc(unsigned int size = <Memory access error>)+0xe0 [f:\vs70builds\3052\vc\crtbld\crt\src\malloc.c @ 212] 0502f620 7c3b3f63 msvcp71!wmemcpy(wchar_t * _S1 = 0x04e463b9 "Ҹ???", wchar_t * _S2 = 0xffffffff "--- memory read error at Adresse 0xffffffff ---", unsigned int _N = 0x4e25212)+0x14 [f:\vs70builds\3077\vc\crtbld\crt\src\wchar.h @ 843] 0502f640 04e463b9 msvcp71!std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >::assign(class std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > * _Right = 0xffffffff, unsigned int _Roff = 0x4e25212, unsigned int _Count = 2)+0x7c [f:\vs70builds\3077\vc\crtbld\crt\src\xstring @ 601] 0502f770 04df1077 Anwendung!DllMain+0x65329 0502f824 04e01b35 Anwendung!DllMain+0xffe7 0502ff08 04dfe034 Anwendung!DllMain+0x20aa5 0502ff48 04dfde4f Anwendung!DllMain+0x1cfa4 0502ff88 7648d0e9 Anwendung!DllMain+0x1cdbf 0502ffc4 773499f9 kernel32!BaseThreadInitThunk+0xe 0502ffd4 7738198e ntdll!RtlQueryInformationAcl+0x8b 0502ffec 00000000 ntdll!_RtlUserThreadStart+0x1b
the line ich bin speziell zu versuchen zu entschlüsseln, ist das 'MyApp!DllMain+0x65329', da dies die Letzte Zeile, die zu sein scheint, ausgeführt wird, und die Fehler, die innerhalb der malloc-Aufruf, das ist offensichtlich, wo die exception wird geworfen. Was mache ich falsch das macht es nur die Anzeige des Modul-und offset-statt der Quelldatei und die Zeilennummer?
Ich bin mir auch nicht sicher, warum der Zeile über der malloc-Aufruf ist wieder in MyApp wieder - vielleicht kann mir jemand erklären, dass auch.
Nur für den Fall, hier ist die Ausgabe von 'analyze-v':
0:004> !analyze-v ******************************************************************************* * * * Exceptionanalyse * * * ******************************************************************************* *** WARNUNG: kann Nicht überprüfen der Prüfsumme für MyApp.exe *** FEHLER: Modul Last abgeschlossen, aber Symbole konnte nicht geladen für MyApp.exe *** WARNUNG: kann Nicht überprüfen der Prüfsumme für ThirdPartyDll.dll *** ERROR: Symbol-Datei konnte nicht gefunden werden. Defaulted to export symbols for ThirdPartyDll.dll - *** WARNUNG: kann Nicht überprüfen der Prüfsumme für mdnsNSP.dll *** ERROR: Symbol-Datei konnte nicht gefunden werden. Defaulted to export symbols for mdnsNSP.dll - *** ERROR: Symbol-Datei konnte nicht gefunden werden. Defaulted to export symbols for SLC.dll - FAULTING_IP: MyApp!DllMain+3e8a6 04e1f936 8b16 mov edx,dword ptr [esi] EXCEPTION_RECORD: ffffffff -- (.exr 0xffffffffffffffff) ExceptionAddress: 04e1f936 (MyApp!DllMain+0x0003e8a6) ExceptionCode: c0000005 (Zugriffsverletzung) ExceptionFlags: 00000000 NumberParameters: 2 Parameter[0]: 00000000 Parameter[1]: 00000000 Versuch zum Lesen von Adresse 00000000 PROCESS_NAME: MyApp.exe ERROR_CODE: (NTSTATUS) 0xc0000005 - Die Anweisung in "0x%08lx" verweist auf Speicher in "0x%08lx". Der Speicher konnte nicht "%s". EXCEPTION_CODE: (NTSTATUS) 0xc0000005 - Die Anweisung in "0x%08lx" verweist auf Speicher in "0x%08lx". Der Speicher konnte nicht "%s". EXCEPTION_PARAMETER1: 00000000 EXCEPTION_PARAMETER2: 00000000 READ_ADDRESS: 00000000 FOLLOWUP_IP: msvcr71!_heap_alloc+e0 [f:\vs70builds\3052\vc\crtbld\crt\src\malloc.c @ 212] 7c3416b3 e88e0c0000 nennen msvcr71!__SEH_epilog (7c342346) NTGLOBALFLAG: 0 APPLICATION_VERIFIER_FLAGS: 0 LAST_CONTROL_TRANSFER: von 00000000 bis 773bbb33 FAULTING_THREAD: ffffffff BUGCHECK_STR: APPLICATION_FAULT_ACTIONABLE_HEAp_corruption_heap_failure_freelists_corruption_null_pointer_read_shutdown PRIMARY_PROBLEM_CLASS: ACTIONABLE_HEAP_CORRUPTION_heap_failure_freelists_corruption_shutdown DEFAULT_BUCKET_ID: ACTIONABLE_HEAP_CORRUPTION_heap_failure_freelists_corruption_shutdown STACK_TEXT: 773bbb33 ntdll!RtlpAllocateHeap+0x7ad 773a6e0c ntdll!RtlAllocateHeap+0x1e3 7c3416b3 msvcr71!_heap_alloc+0xe0 FAULTING_SOURCE_CODE: Keine Quelle gefunden für 'f:\vs70builds\3052\vc\crtbld\crt\src\malloc.c' SYMBOL_STACK_INDEX: 2 SYMBOL_NAME: msvcr71!_heap_alloc+e0 FOLLOWUP_NAME: MachineOwner MODULNAME: msvcr71 IMAGE_NAME: msvcr71.dll DEBUG_FLR_IMAGE_TIMESTAMP: 3e561eac STACK_COMMAND: dds 7740c078 ; kb FAILURE_BUCKET_ID: ACTIONABLE_HEAP_CORRUPTION_heap_failure_freelists_corruption_SHUTDOWN_c0000005_msvcr71.dll!_heap_alloc BUCKET_ID: APPLICATION_FAULT_ACTIONABLE_HEAp_corruption_heap_failure_freelists_corruption_null_pointer_read_shutdown_msvcr71!_heap_alloc+e0
InformationsquelleAutor Michael Bray | 2009-07-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie glauben, dass der PDB sollte Ihr symbol Pfad, führen Sie etwas wie dieses:
!sym-laut bewirkt, dass der debugger zu geben genauere Informationen darüber, warum es konnte nicht geladen werden Symbole - keine Anwendung.pdb gefunden, fand aber nicht passt, etc. Dies wird Ihnen helfen, herauszufinden, warum es nicht geladen werden Symbole. !sym lauten wieder schaltet den verbose-symbol ausgegeben.
InformationsquelleAutor Michael
Wenn Sie den Pfad für die Symbole, hast du neu laden?
Ich bin nicht sicher, ob Ihr hinzufügen
in den symbol-Pfad die gewünschte Wirkung hat.
Ich in der Regel eine Liste aller lokale Pfade in der .sympath erste, und als der Letzte Schritt, den ich tun .symfix+ konfigurieren der öffentlichen Symbole mit dem microsoft symbol server:
Gründe auflisten lokaler Pfade, die erste ist, dass der debugger würde nicht überprüfen Sie die remote-server für PDB-Dateien (die es nicht sowieso), im Gegensatz zu einfach abrufen, lokal.
Anyways, dein problem ist, dass die Symbole für die Anwendung werden nicht geladen, daher stack zu Fuß nicht ganz funktioniert.
Debugger geht der stack nach hinten, von oben beginnend, das ist, warum Sie sehen, die Anwendung - dies ist, wo die Zugriffsverletzung ist aufgetreten.
Jetzt, da die debugger nicht die Symbole an dieser Stelle, es kann nur erahnen, was der Aufruf-Kette hat dazu geführt, die Funktion an der Spitze.
Und es Vermutungen falsch, indem Sie die folgenden einer irreführenden Pfad.
InformationsquelleAutor deemok