Windows 7 上 Windows dll 的断点异常

Breakpoint exceptions from Windows dll's on Windows 7

本文关键字:Windows 断点 异常 dll      更新时间:2023-10-16

我的游戏引擎中的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 Heartsdebugperilous_hearts.DMP]
User Mini Dump File with Full Memory: Only application data is available
Symbol search path is: E:Perilous Heartsdebug
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++ testsbgtmain.cpp @ 113]
0012f1f4 0044cb6e 01c27f28 004eab68 01c4a9e8 perilous_hearts!LineCallback+0xe [e:c++ testsbgtmain.cpp @ 572]
0012f224 004367b2 01c27f28 004eab68 01c27fa8 perilous_hearts!asCScriptEngine::CallGlobalFunction+0x1e [e:c++ testsbgtangelscriptsourceas_scriptengine.cpp @ 3140]
0012f238 00438310 01c28058 01c27f28 0012f2fc perilous_hearts!asCContext::CallLineCallback+0x22 [e:c++ testsbgtangelscriptsourceas_context.cpp @ 3780]
0012f2fc 0043a7c8 00000006 75c5ea71 ffffffff perilous_hearts!asCContext::ExecuteNext+0x9d0 [e:c++ testsbgtangelscriptsourceas_context.cpp @ 2033]
0012f314 00466ee9 0012f72c 0012f7b8 00480be0 perilous_hearts!asCContext::Execute+0x1b8 [e:c++ testsbgtangelscriptsourceas_context.cpp @ 983]
0012f72c 0047c505 75c1147a 75c0e18a 00400000 perilous_hearts!execute+0x119 [e:c++ testsbgtmain.cpp @ 1035]
0012fd40 0047c5c3 0047c6be 00000000 00232027 perilous_hearts!RunApplication+0xb15 [e:c++ testsbgtmain.cpp @ 929]
0012fd44 0047c6be 00000000 00232027 00000cc0 perilous_hearts!run_script+0x93 [e:c++ testsbgtmain.cpp @ 1259]
0012feb0 0047cbdc 00000000 fffffffe 00000000 perilous_hearts!main_game+0x4e [e:c++ testsbgtmain.cpp @ 1367]
0012fef8 00492973 00400000 00000000 00232027 perilous_hearts!WinMain+0x3dc [e:c++ testsbgtmain.cpp @ 1551]
0012ff88 75ef1194 7ffd5000 0012ffd4 7770b429 perilous_hearts!__tmainCRTStartup+0x113 [f:ddvctoolscrt_bldself_x86crtsrccrt0.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 命令进行编译。

作为旁注,如果有人愿意花一些时间与我一起深入研究这个问题,我将非常乐意在经济上支付这些时间。

提前感谢任何帮助!

亲切问候

菲利普·本内福尔

此故障转储没有帮助,因为它缺少 AcXtrnal.dll 的符号,因此堆栈可能未正确遍历。

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

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

我强烈建议下载应用程序兼容性工具包(更多信息在这里)并使用它运行您的程序,以诊断与比Windows XP更新的Windows版本的潜在兼容性问题。