2011-05-11 2 views
-1

J'ai des problèmes avec les plantages sur Windows 7 32 bits dans mon moteur de jeu. Il fonctionne sans aucun de ces accidents sur Windows XP 32 bits, qui est ma machine de développement. J'ai compilé une version de débogage du moteur, ce qui est une sortie générée à partir d'un vidage sur incident que j'ai reçu d'un testeur:Exceptions breakpoint à partir de Windows dll sur Windows 7

Microsoft (R) Windows Debugger Version 6.11.0001.404 X86 
Copyright (c) Microsoft Corporation. All rights reserved. 


Loading Dump File [E:\Perilous Hearts\debug\perilous_hearts.DMP] 
User Mini Dump File with Full Memory: Only application data is available 

Symbol search path is: E:\Perilous Hearts\debug 
Executable search path is: 
Windows 7 Version 7600 MP (4 procs) Free x86 compatible 
Product: WinNt, suite: SingleUserTS 
Machine Name: 
Debug session time: Wed May 11 20:04:24.000 2011 (GMT+2) 
System Uptime: 0 days 1:57:58.550 
Process Uptime: 0 days 0:01:16.000 
................................................................ 
.......... 
Loading unloaded module list 
..... 
eax=00000000 ebx=0012f088 ecx=00000000 edx=00000000 esi=00000011 edi=6c350dd8 
eip=776f6344 esp=0012f028 ebp=0012f080 iopl=0   nv up ei pl zr na pe cy 
cs=001b ss=0023 ds=0000 es=0000 fs=003b gs=0000    efl=00000247 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for ntdll.dll - 
ntdll!KiFastSystemCallRet: 
776f6344 c3    ret 
0:000> |* !analyze -v -f 
******************************************************************************* 
*                    * 
*      Exception Analysis         * 
*                    * 
******************************************************************************* 

*** ERROR: Symbol file could not be found. Defaulted to export symbols for KERNELBASE.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for imm32.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for user32.dll - 
*** WARNING: Unable to verify checksum for perilous_hearts.exe 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for kernel32.dll - 
***** OS symbols are WRONG. Please fix symbols to do analysis. 

************************************************************************* 
***                 *** 
***                 *** 
*** Your debugger is not using the correct symbols     *** 
***                 *** 
*** In order for this command to work properly, your symbol path *** 
*** must point to .pdb files that have full type information.  *** 
***                 *** 
*** Certain .pdb files (such as the public OS symbols) do not  *** 
*** contain the required information. Contact the group that  *** 
*** provided you with these symbols if you need this command to *** 
*** work.               *** 
***                 *** 
*** Type referenced: ntdll!_PEB         *** 
***                 *** 
************************************************************************* 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for minHook.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for acatts.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for nvdaHelperRemote.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for IAccessible2Proxy.dll - 
*** WARNING: Unable to verify checksum for Hlas.dll 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for Hlas.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for ntvdm.exe - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for AcaTtsSapi5.dll - 
*** WARNING: Unable to verify checksum for gwmhook.dll 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for gwmhook.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for HLW32.DLL - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for dsound.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for sapi.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for msdmo.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for sfc_os.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for sfc.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for uiautomationcore.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for dinput8.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for midimap.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for msacm32.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for msacm32.drv - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for AudioSes.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for ksuser.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for wdmaud.drv - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for winmm.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for wkscli.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for netutils.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for netapi32.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for winspool.drv - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for oleacc.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for comctl32.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for MMDevAPI.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for powrprof.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for wtsapi32.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for hid.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for avrt.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for propsys.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for winsta.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for rsaenh.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for cryptsp.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for srvcli.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for apphelp.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for CRYPTBASE.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for sxs.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for RpcRtRemote.dll - 
*** ERROR: Module load completed but symbols could not be loaded for profapi.dll 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for msasn1.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for wintrust.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for devobj.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for cfgmgr32.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for crypt32.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for oleaut32.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for ws2_32.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for msvcrt.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for msctf.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for shlwapi.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for ole32.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for setupapi.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for comdlg32.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for gdi32.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for rpcrt4.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for shell32.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for advapi32.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for usp10.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for lpk.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for nsi.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for psapi.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for clbcatq.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for sechost.dll - 
************************************************************************* 
***                 *** 
***                 *** 
*** Your debugger is not using the correct symbols     *** 
***                 *** 
*** In order for this command to work properly, your symbol path *** 
*** must point to .pdb files that have full type information.  *** 
***                 *** 
*** Certain .pdb files (such as the public OS symbols) do not  *** 
*** contain the required information. Contact the group that  *** 
*** provided you with these symbols if you need this command to *** 
*** work.               *** 
***                 *** 
*** Type referenced: IMAGE_NT_HEADERS32       *** 
***                 *** 
************************************************************************* 
************************************************************************* 
***                 *** 
***                 *** 
*** Your debugger is not using the correct symbols     *** 
***                 *** 
*** In order for this command to work properly, your symbol path *** 
*** must point to .pdb files that have full type information.  *** 
***                 *** 
*** Certain .pdb files (such as the public OS symbols) do not  *** 
*** contain the required information. Contact the group that  *** 
*** provided you with these symbols if you need this command to *** 
*** work.               *** 
***                 *** 
*** Type referenced: kernel32!pNlsUserInfo       *** 
***                 *** 
************************************************************************* 
************************************************************************* 
***                 *** 
***                 *** 
*** Your debugger is not using the correct symbols     *** 
***                 *** 
*** In order for this command to work properly, your symbol path *** 
*** must point to .pdb files that have full type information.  *** 
***                 *** 
*** Certain .pdb files (such as the public OS symbols) do not  *** 
*** contain the required information. Contact the group that  *** 
*** provided you with these symbols if you need this command to *** 
*** work.               *** 
***                 *** 
*** Type referenced: kernel32!pNlsUserInfo       *** 
***                 *** 
************************************************************************* 

FAULTING_IP: 
+26b952f019cdf74 
00000000 ??    ??? 

EXCEPTION_RECORD: ffffffff -- (.exr 0xffffffffffffffff) 
ExceptionAddress: 00000000 
    ExceptionCode: 80000003 (Break instruction exception) 
    ExceptionFlags: 00000000 
NumberParameters: 0 

FAULTING_THREAD: 000007fc 

DEFAULT_BUCKET_ID: WRONG_SYMBOLS 

PROCESS_NAME: perilous_hearts.exe 

ADDITIONAL_DEBUG_TEXT: 
Use '!findthebuild' command to search for the target build information. 
If the build information is available, run '!findthebuild -s ; .reload' to set symbol path and load symbols. 

FAULTING_MODULE: 776b0000 ntdll 

DEBUG_FLR_IMAGE_TIMESTAMP: 4a5bd98a 

ERROR_CODE: (NTSTATUS) 0x80000003 - {EXCEPTION} Breakpoint A breakpoint has been reached. 

EXCEPTION_CODE: (HRESULT) 0x80000003 (2147483651) - One or more arguments are invalid 

PRIMARY_PROBLEM_CLASS: WRONG_SYMBOLS 

BUGCHECK_STR: APPLICATION_FAULT_WRONG_SYMBOLS 

LAST_CONTROL_TRANSFER: from 6c3291dd to 776f6344 

STACK_TEXT: 
WARNING: Stack unwind information not available. Following frames may be wrong. 
0012f080 6c3291dd 0266000c 6c3291dd 6c350dd8 ntdll!KiFastSystemCallRet 
0012f0a0 759b1abf 00230000 6021a558 75c161dd AcXtrnal+0x91dd 
0012f0dc 75f82868 0266000c 00000102 00285360 KERNELBASE!LocalLock+0x29 
0012f0f0 75f82801 002e04eb 00000001 0012f12c imm32!ImmLockIMC+0x76 
0012f100 75f84a19 002e04eb 00000102 004eb714 imm32!ImmLockIMC+0xf 
0012f12c 75c36b11 000801e8 04050405 00000025 imm32!ImmProcessKey+0x31 
0012f154 776f627e 0012f16c 00000014 0012ff78 user32!GetLastActivePopup+0xc5 
0012f1a8 75c12fdc 004eb714 000801e8 00000000 ntdll!KiUserCallbackDispatcher+0x2e 
0012f1d4 0047f1cb 004eb714 000801e8 00000000 user32!PeekMessageA+0x12a 
0012f1f0 00480bee 0044cb6e 01c27f28 004eab68 perilous_hearts!poll_window+0x7b [e:\c++ tests\bgt\main.cpp @ 113] 
0012f1f4 0044cb6e 01c27f28 004eab68 01c4a9e8 perilous_hearts!LineCallback+0xe [e:\c++ tests\bgt\main.cpp @ 572] 
0012f224 004367b2 01c27f28 004eab68 01c27fa8 perilous_hearts!asCScriptEngine::CallGlobalFunction+0x1e [e:\c++ tests\bgt\angelscript\source\as_scriptengine.cpp @ 3140] 
0012f238 00438310 01c28058 01c27f28 0012f2fc perilous_hearts!asCContext::CallLineCallback+0x22 [e:\c++ tests\bgt\angelscript\source\as_context.cpp @ 3780] 
0012f2fc 0043a7c8 00000006 75c5ea71 ffffffff perilous_hearts!asCContext::ExecuteNext+0x9d0 [e:\c++ tests\bgt\angelscript\source\as_context.cpp @ 2033] 
0012f314 00466ee9 0012f72c 0012f7b8 00480be0 perilous_hearts!asCContext::Execute+0x1b8 [e:\c++ tests\bgt\angelscript\source\as_context.cpp @ 983] 
0012f72c 0047c505 75c1147a 75c0e18a 00400000 perilous_hearts!execute+0x119 [e:\c++ tests\bgt\main.cpp @ 1035] 
0012fd40 0047c5c3 0047c6be 00000000 00232027 perilous_hearts!RunApplication+0xb15 [e:\c++ tests\bgt\main.cpp @ 929] 
0012fd44 0047c6be 00000000 00232027 00000cc0 perilous_hearts!run_script+0x93 [e:\c++ tests\bgt\main.cpp @ 1259] 
0012feb0 0047cbdc 00000000 fffffffe 00000000 perilous_hearts!main_game+0x4e [e:\c++ tests\bgt\main.cpp @ 1367] 
0012fef8 00492973 00400000 00000000 00232027 perilous_hearts!WinMain+0x3dc [e:\c++ tests\bgt\main.cpp @ 1551] 
0012ff88 75ef1194 7ffd5000 0012ffd4 7770b429 perilous_hearts!__tmainCRTStartup+0x113 [f:\dd\vctools\crt_bld\self_x86\crt\src\crt0.c @ 263] 
0012ff94 7770b429 7ffd5000 7700c664 00000000 kernel32!BaseThreadInitThunk+0x12 
0012ffd4 7770b3fc 004929de 7ffd5000 00000000 ntdll!RtlInitializeExceptionChain+0x63 
0012ffec 00000000 004929de 7ffd5000 00000000 ntdll!RtlInitializeExceptionChain+0x36 


STACK_COMMAND: ~0s; .ecxr ; kb 

FOLLOWUP_IP: 
AcXtrnal+91dd 
6c3291dd 8b1d0c11326c mov  ebx,dword ptr [AcXtrnal+0x110c (6c32110c)] 

SYMBOL_STACK_INDEX: 1 

SYMBOL_NAME: AcXtrnal+91dd 

FOLLOWUP_NAME: MachineOwner 

MODULE_NAME: AcXtrnal 

IMAGE_NAME: AcXtrnal.dll 

BUCKET_ID: WRONG_SYMBOLS 

FAILURE_BUCKET_ID: WRONG_SYMBOLS_80000003_AcXtrnal.dll!Unknown 

WATSON_STAGEONE_URL: http://watson.microsoft.com/StageOne/perilous_hearts_exe/0_0_0_0/4dc830b1/unknown/0_0_0_0/bbbbbbb4/80000003/00000000.htm?Retriage=1 

Followup: MachineOwner 

J'ai eu beaucoup de ces exceptions, et je ne peux tout simplement pas comprendre pourquoi ils se produisent. Je fais évidemment quelque chose de mal quelque part, mais il semble impossible de reproduire sur Xp. J'ai essayé de mettre en place un gestionnaire d'exception vectoriel pour rechercher cette exception particulière et continuer l'exécution si elle était déclenchée, mais pas de chance là.

Le moteur est compilé avec/Zi dans les paramètres du compilateur, mais avec la commande/OPT: REF donnée à l'éditeur de liens.

En note, si quelqu'un est prêt à passer du temps à approfondir cela avec moi, je serais plus qu'heureux de couvrir ces heures financièrement.

Merci d'avance pour toute aide!

Cordialement,

Philip Bennefall

+0

Quelle est exactement la question? –

+0

Fondamentalement comment je peux éviter ces accidents? Je me bats avec eux depuis environ 3 mois maintenant et ne peux pas pour la vie de moi comprendre pourquoi ils se produisent ou comment les réparer/les empêcher. –

+0

Comme d'autres l'ont noté, l'absence de symboles du système d'exploitation de votre information rend beaucoup moins certain de ce qui se passe. Pouvez-vous re-poster avec les symboles du système d'exploitation? Ce testeur est-il réellement contactable? La pile semble pointer de manière crédible vers l'IME (la fenêtre d'entrée utilisée dans divers pays asiatiques et autres). Il y a un large éventail d'IME de troisième partie buggés là-bas. Dans un premier temps, voyez s'il se reproduit pour le testeur avec l'IME désinstallé (ou au moins désactivé). Vous pourriez également vouloir voir si le problème vous est reproché sur XP ou Win7 avec IME activé. –

Répondre

1

Cette décharge COLLISION est inutile, car il manque des symboles pour AcXtrnal.dll, il est donc probable que la pile n'est pas marché correctement. AcXtrnl.dll est une DLL de compatibilité des applications pour Windows, et est généralement chargé uniquement par un processus si "Exécuter ce programme en mode de compatibilité" est coché dans l'onglet Compatibilité de la boîte de dialogue Propriétés de l'exécutable.

Si ce paramètre est coché sur vos testeurs Windows 7, le désélectionner permet-il à votre programme de fonctionner correctement?

Je vous recommande vivement de télécharger le Application Compatibility Toolkit (plus d'informations here) et d'exécuter votre programme avec celui-ci pour diagnostiquer les problèmes de compatibilité potentiels avec les versions de Windows plus récentes que Windows XP.

+0

Merci pour ces conseils, je n'étais même pas au courant de cette boîte à outils. J'ai téléchargé les fichiers nécessaires et je commence à me familiariser avec le programme. Je me demande cependant, pourquoi Windows 7 émet un point d'arrêt lorsque Windows Xp ne fonctionne pas? J'ai même eu des points d'arrêt déclenchés dans quelque chose d'aussi trivial que la fonction Sleep dans kernel32. Ma première impulsion était d'essayer et d'ignorer simplement l'exception, mais le gestionnaire d'exception vectorisé ne semblait pas l'attraper quand il se produisait dans un module externe même si mon processus était le parent pour ainsi dire. –