2010-02-06 92 views
7

我尝试运行一个可执行文件时,偶尔会遇到这个错误,我建立在Windows上,但我不知道是什么导致它或如何解决它。使用普通的MSVC调试器,它只是弹出一个对话框并退出,没有机会做任何事情或看任何事情。我已经设法至少抓住了一些东西,并用微软控制台调试器获得堆栈跟踪,但我不知道从这里看到什么。在进入我的程序的主要功能或运行我的任何代码之前,它似乎在ntdll.dll中出现奇怪的故障。调试可怕的'应用程序未能初始化'错误

C:\> cdb bugrepro 
Microsoft (R) Windows Debugger Version 6.11.0001.404 X86 
Copyright (c) Microsoft Corporation. All rights reserved. 

CommandLine: bugrepro.exe 
Symbol search path is: C:\SYMBOLS 
Executable search path is: 
ModLoad: 00400000 00447000 bugrepro.exe 
ModLoad: 7c900000 7c9af000 ntdll.dll 
ModLoad: 7c800000 7c8f6000 C:\WINDOWS\system32\kernel32.dll 
ModLoad: 10000000 1002a000 glut32.dll 
ModLoad: 5ed00000 5edcc000 C:\WINDOWS\system32\OPENGL32.dll 
ModLoad: 77c10000 77c68000 C:\WINDOWS\system32\msvcrt.dll 
ModLoad: 77dd0000 77e6b000 C:\WINDOWS\system32\ADVAPI32.dll 
ModLoad: 77e70000 77f02000 C:\WINDOWS\system32\RPCRT4.dll 
ModLoad: 77fe0000 77ff1000 C:\WINDOWS\system32\Secur32.dll 
ModLoad: 77f10000 77f59000 C:\WINDOWS\system32\GDI32.dll 
ModLoad: 7e410000 7e4a1000 C:\WINDOWS\system32\USER32.dll 
ModLoad: 68b20000 68b40000 C:\WINDOWS\system32\GLU32.dll 
ModLoad: 73760000 737ab000 C:\WINDOWS\system32\DDRAW.dll 
ModLoad: 73bc0000 73bc6000 C:\WINDOWS\system32\DCIMAN32.dll 
ModLoad: 76b40000 76b6d000 C:\WINDOWS\system32\WINMM.dll 
(64c.7b4): Unknown exception - code c0000022 (first chance) 
(64c.7b4): Unknown exception - code c0000022 (!!! second chance !!!) 
eax=0012fc54 ebx=00000000 ecx=0012fc80 edx=7c90e4f4 esi=7ffd8000 
edi=c0000022 
eip=7c96478e esp=0012fc54 ebp=0012fca4 iopl=0   nv up ei pl zr na pe nc 
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000246 
ntdll!RtlRaiseStatus+0x26: 
7c96478e c9    leave 
0:000> ~k 
ChildEBP RetAddr 
0012fca4 7c93f14e ntdll!RtlRaiseStatus+0x26 
0012fd1c 7c90e437 ntdll!_LdrpInitialize+0x241 
00000000 00000000 ntdll!KiUserApcDispatcher+0x7 
0:000> 

任何人有任何建议,在这里调试呢?

回答

10

在Moron的回答中,您应该运行Process Monitor

此工具会准确告诉您您的过程执行了哪些操作,以及尝试加载哪些文件(可能至少有一个失败)以及错误是什么。

它不止于此,对于任何过程故障排除,它是一个惊人的节省时间。

+2

这个工具终于能够确定问题所在 - 在glew32.dll上缺少执行权限 – 2010-02-07 01:14:35

1

如果我正确记得,例外代码c0000022代表访问被拒绝。通常,这意味着Windows阻止访问资源,如域控制器或驱动程序。

您还没有指定应用程序的性质,但是从堆栈转储可以看出,它处理3D/OpenGL设备。也许你的问题在于配置错误的驱动程序或库。我建议在另一台机器上测试和/或重新安装驱动程序。

+0

宾果! Cygwin命令'chmod a + x * .dll'解决了我的问题。 – 2016-11-22 16:57:43

3

通常,“应用程序未能初始化”错误与缺少dll导入有关;结合0xC0000022它可能意味着您的应用程序所需的DLL无法加载,因为访问被拒绝错误(也许用户没有权限打开/执行该文件)。

+0

我现在看到了决议...哇,我的心理调试权力是正确的! – 2010-02-07 13:25:05

3

尝试使用依赖项步行者运行。 http://dependencywalker.com/

它执行依赖关系的静态分析,它也可以跟踪应用程序的启动。

相关问题