Einer der Kunden unserer Software beschwerte sich, dass es auf seinem Windows XP-Rechner abstürzte. Ich fragte ihn, ProcDump zum Herunterladen und unser Prozess durch sie als solche ausgeführt:Crashdump, der von einem anderen Betriebssystem abgerufen wurde, zeigt auf die Nachrichtenschleife. Wie komme ich von dort zum Fehlerort? (TeamViewer stürzt meinen Prozess ab.)
procdump -e -ma -w myproc.exe
für die der Nutzer per E-Mail mich gesammelt Crash-Dump .dmp
Datei.
Dann stellte ich, dass .dmp
Datei in denselben Ordner wie die Original .exe
Bilddatei für den Prozess, sowie die .pdb
Datei, und lief die .dmp
Datei durch Visual Studio 2010:
Dann, wenn ich klickte "Debuggen mit nativen nur" VS zeigte den Quellcode für die MFC
's-Schleife mit der Zeigerposition nach DispatchMessage
Anruf (siehe grüner Pfeil):
hat der Call-Stack nicht viel helfen, entweder:
und wenn ich an den gemeldeten Fehleradresse gesprungen, ich habe nichts:
Die App wurde in VS 2008
als eine dialogbasierte C++/MFC-Anwendung kompiliert.
Also überprüfe ich die Größe der .dmp
Datei und es ist 26,6 MB. Da sind Daten drin. Die Frage, die ich habe, ist, wie kann ich nützlichere Informationen daraus erhalten, um den Ort des Fehlers im Quellcode zu lokalisieren?
PS. Im Nachhinein habe ich gesehen, dass der Absturz unter Windows XP passiert, während ich diese Crash-Dump-Datei unter Windows 8.1 ausgeführt habe: .dmp
. Ist das der Grund, warum ich Müll im Stack-Trace bekomme?
EDIT: Hier ist, was ich in Disassembler, wenn ich versuche, Parameter in MSG Struktur zu sehen, dass DispatchMessage
aufgerufen wurde:
Auch wenn ich versuche, Werte zu sehen in pState
ich symbol not found
bekommen .
EDIT 2: Bezüglich Module und das Modul in den Fehler EIP
Adresse geladen. Die Speicher-Slot für 0x1963AB50
scheint nicht von einem Modul belegt werden:
EDIT 3: Sorry, es wird immer zu lang. Ich öffnete schließlich den Crash-Dump in WinDbg
und tat !analyze -v
Befehl darauf. Hier ist die Ausgabe.Es scheint, wie die DLL, die/entladen wurde fehlt, ist tv_w32.dll
:
Microsoft (R) Windows Debugger Version 10.0.10586.567 X86
Copyright (c) Microsoft Corporation. All rights reserved.
Loading Dump File [C:\Users\User\Desktop\Myproc\Release\Myproc.exe_160708_141237.dmp]
User Mini Dump File with Full Memory: Only application data is available
Comment: '
*** procdump -e -ma -w Myproc.exe
*** Unhandled exception: C0000005.ACCESS_VIOLATION'
************* Symbol Path validation summary **************
Response Time (ms) Location
Deferred srv*c:\MyServerSymbols*https://msdl.microsoft.com/download/symbols
Symbol search path is: srv*c:\MyServerSymbols*https://msdl.microsoft.com/download/symbols
Executable search path is:
Windows XP Version 2600 (Service Pack 3) MP (2 procs) Free x86 compatible
Product: WinNt, suite: SingleUserTS
Machine Name:
Debug session time: Fri Jul 8 05:12:39.000 2016 (UTC - 7:00)
System Uptime: 9 days 6:05:50.960
Process Uptime: 3 days 5:08:52.000
.....................................
Loading unloaded module list
..
This dump file has an exception of interest stored in it.
The stored exception information can be accessed via .ecxr.
(ba4.4a4): Access violation - code c0000005 (first/second chance not available)
eax=00000001 ebx=00000002 ecx=7c92741c edx=7c98e174 esi=1963ab50 edi=1963ab50
eip=19608536 esp=0012ee3c ebp=0012ee5c iopl=0 nv up ei pl nz na po nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000202
<Unloaded_tv_w32.dll>+0x8536:
19608536 ?? ???
0:000> .bugcheck
^Syntax error in '.bugcheck'
0:000> !analyze -v
*******************************************************************************
* *
* Exception Analysis *
* *
*******************************************************************************
DUMP_CLASS: 2
DUMP_QUALIFIER: 400
CONTEXT: (.ecxr)
eax=00000001 ebx=00000002 ecx=7c92741c edx=7c98e174 esi=1963ab50 edi=1963ab50
eip=19608536 esp=0012ee3c ebp=0012ee5c iopl=0 nv up ei pl nz na po nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000202
<Unloaded_tv_w32.dll>+0x8536:
19608536 ?? ???
Resetting default scope
FAULTING_IP:
tv_w32!unloaded+8536
19608536 ?? ???
EXCEPTION_RECORD: (.exr -1)
ExceptionAddress: 19608536 (<Unloaded_tv_w32.dll>+0x00008536)
ExceptionCode: c0000005 (Access violation)
ExceptionFlags: 00000000
NumberParameters: 2
Parameter[0]: 00000000
Parameter[1]: 19608536
Attempt to read from address 19608536
DEFAULT_BUCKET_ID: BAD_INSTRUCTION_PTR
PROCESS_NAME: Myproc.exe
ERROR_CODE: (NTSTATUS) 0xc0000005 - The instruction at 0x%p referenced memory at 0x%p. The memory could not be %s.
EXCEPTION_CODE: (NTSTATUS) 0xc0000005 - The instruction at 0x%p referenced memory at 0x%p. The memory could not be %s.
EXCEPTION_CODE_STR: c0000005
EXCEPTION_PARAMETER1: 00000000
EXCEPTION_PARAMETER2: 19608536
READ_ADDRESS: 19608536
FOLLOWUP_IP:
tv_w32!unloaded+8536
19608536 ?? ???
FAILED_INSTRUCTION_ADDRESS:
tv_w32!unloaded+8536
19608536 ?? ???
WATSON_BKT_PROCSTAMP: 576c0d97
WATSON_BKT_PROCVER: 1.5.16.0
PROCESS_VER_PRODUCT: Myproc Name
WATSON_BKT_MODULE: unknown
WATSON_BKT_MODVER: 0.0.0.0
WATSON_BKT_MODOFFSET: 19608536
MODLIST_WITH_TSCHKSUM_HASH: 8b7920bcb3af2eb1b97366fd0663a3798ab285ea
MODLIST_SHA1_HASH: b5acbaed45de37ad3c73ee4478c8f6678e94eaa6
NTGLOBALFLAG: 0
APPLICATION_VERIFIER_FLAGS: 0
PRODUCT_TYPE: 1
SUITE_MASK: 272
DUMP_FLAGS: 3
DUMP_TYPE: 0
APP: Myproc.exe
ANALYSIS_SESSION_HOST: DESKTOP-ABC
ANALYSIS_SESSION_TIME: 07-08-2016 22:18:58.0444
ANALYSIS_VERSION: 10.0.10586.567 x86fre
IP_MODULE_UNLOADED:
tv_w32!unloaded+8536
19608536 ?? ???
THREAD_ATTRIBUTES:
OS_LOCALE: DEU
PROBLEM_CLASSES:
BAD_INSTRUCTION_PTR
Tid [0x4a4]
Frame [0x00]: tv_w32!unloaded
INVALID_POINTER_READ
Tid [0x4a4]
Frame [0x00]: tv_w32!unloaded
BUGCHECK_STR: BAD_INSTRUCTION_PTR_INVALID_POINTER_READ
LAST_CONTROL_TRANSFER: from 00000000 to 19608536
STACK_TEXT:
0012ee38 00000000 19608648 ffff071b 00000000 <Unloaded_tv_w32.dll>+0x8536
THREAD_SHA1_HASH_MOD_FUNC: 0959aaead905d5402017a9de12facac3929f71c3
THREAD_SHA1_HASH_MOD_FUNC_OFFSET: 52f8c4ddebdd2e855f90e79f96f6fc29a470ad1d
THREAD_SHA1_HASH_MOD: 2e69fc2d39893b6d7d9991dcc4967479dbafb5c5
SYMBOL_STACK_INDEX: 0
SYMBOL_NAME: tv_w32!unloaded+8536
FOLLOWUP_NAME: MachineOwner
MODULE_NAME: tv_w32
IMAGE_NAME: tv_w32.dll
DEBUG_FLR_IMAGE_TIMESTAMP: 573435d6
STACK_COMMAND: .ecxr ; kb
FAILURE_BUCKET_ID: BAD_INSTRUCTION_PTR_c0000005_tv_w32.dll!unloaded
BUCKET_ID: BAD_INSTRUCTION_PTR_INVALID_POINTER_READ_UNLOADED_IP_tv_w32!unloaded+8536
PRIMARY_PROBLEM_CLASS: BAD_INSTRUCTION_PTR_INVALID_POINTER_READ_UNLOADED_IP_tv_w32!unloaded+8536
BUCKET_ID_OFFSET: 8536
BUCKET_ID_MODULE_STR: tv_w32
BUCKET_ID_MODTIMEDATESTAMP: 573435d6
BUCKET_ID_MODCHECKSUM: 45ff9
BUCKET_ID_MODVER_STR: 0.0.0.0
BUCKET_ID_PREFIX_STR: BAD_INSTRUCTION_PTR_INVALID_POINTER_READ_UNLOADED_IP_
FAILURE_PROBLEM_CLASS: BAD_INSTRUCTION_PTR
FAILURE_EXCEPTION_CODE: c0000005
FAILURE_IMAGE_NAME: tv_w32.dll
FAILURE_FUNCTION_NAME: unloaded
BUCKET_ID_FUNCTION_STR: unloaded
FAILURE_SYMBOL_NAME: tv_w32.dll!unloaded
TARGET_TIME: 2016-07-08T12:12:39.000Z
OSBUILD: 2600
OSSERVICEPACK: 6532
SERVICEPACK_NUMBER: 6
OS_REVISION: 0
OSPLATFORM_TYPE: x86
OSNAME: Windows XP
OSEDITION: Windows XP WinNt (Service Pack 3) SingleUserTS
USER_LCID: 0
OSBUILD_TIMESTAMP: 2014-03-12 03:48:40
ANALYSIS_SESSION_ELAPSED_TIME: e0a
ANALYSIS_SOURCE: UM
FAILURE_ID_HASH_STRING: um:bad_instruction_ptr_c0000005_tv_w32.dll!unloaded
FAILURE_ID_HASH: {7c7c5a5b-462a-0301-1674-660f1336c576}
Followup: MachineOwner
---------
In der Funktion "AfxInternalPumpMessage" können Sie sehen, was die letzte Nachricht behandelt wurde? Haben Sie einen Handler für diese Nachricht? Was macht dieser Handler? Enthält die Handler-Funktion lokale Arrays, und Sie schreiben außerhalb der Grenzen davon? Da diese Art von Fehlern bei einem beschädigten Stack hauptsächlich auf das Schreiben von lokalen Variablen in einer oder mehreren Ihrer eigenen Funktionen zurückzuführen ist. Wenn der Code nicht zu groß ist, könnte es eine gute Idee sein, ihn jemand überprüfen zu lassen. Oder versuchen Sie zumindest, Debug-Logging und Tracing hinzuzufügen. –
@JoachimPileborg: Danke. Ich habe meine ursprüngliche Frage aktualisiert. (Siehe Bearbeiten.) – c00000fd
Sie erhalten die Quelle für den Message-Handler, da dies der erste Frame auf dem Stack ist, den der Debugger gefunden hat und dessen Quelle vorhanden ist. Der Inhalt des EDI-Registers ist, was auch immer sie an der Stelle des Absturzes sind, die bei 0x1963AB50 ist. Suchen Sie auf der Registerkarte "Module" nach, welche DLL unter dieser Adresse geladen ist. Enthält Ihre Version Build die Debug-Symbole? – 1201ProgramAlarm