Windows 7上Windows dll的断点异常

时间:2011-05-11 21:09:47

标签: c++ debugging exception

我在游戏引擎中的Windows 7 32位崩溃时遇到了一些麻烦。它在Windows xp 32位上运行时没有任何此类崩溃,这是我的开发机器。我编译了引擎的调试版本,这是我从测试人员收到的崩溃转储生成的一些输出:

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

我有很多这些例外,我根本无法弄清楚它们为什么会发生。我显然在某处做错了什么,但似乎无法在Xp上重现。我试图设置一个向量异常处理程序来查找这个特殊的异常,然后如果它被触发就继续执行,但那里没有运气。

引擎在编译器设置中使用/ Zi编译,但是使用了给链接器的/ OPT:REF命令。

作为旁注,如果有人愿意花一些时间与我一起深入了解这一点,我会非常乐意在经济上支付这些时间。

提前感谢您的帮助!

亲切的问候,

Philip Bennefall

1 个答案:

答案 0 :(得分:1)

此崩溃转储无用,因为它缺少AcXtrnal.dll的符号,因此堆栈可能没有正确行走。

AcXtrnl.dll是Windows的应用程序兼容性DLL,如果在可执行文件的“属性”对话框的“兼容性”选项卡中选中“以兼容模式运行此程序”,则通常仅由进程加载。

如果您的Windows 7测试人员选中此设置,取消选中该设置是否允许您的程序正常运行?

我强烈建议您下载Application Compatibility Toolkit(更多信息here)并使用它运行程序,以诊断与Windows XP相比较的Windows版本的潜在兼容性问题。