【问题标题】:Debugging the dreaded 'Application has failed to initialize' error调试可怕的“应用程序初始化失败”错误
【发布时间】:2010-02-06 19:46:21
【问题描述】:

我在尝试运行我在 Windows 上构建的可执行文件时偶尔会遇到此错误,但我不知道是什么原因导致它或如何修复它。使用普通的 MSVC 调试器,它只会弹出一个对话框并退出,没有机会做任何事情或查看任何内容。我已经设法至少捕捉到一些东西并使用 Microsoft 控制台调试器获取堆栈跟踪,但我不知道从这里看什么。在进入我的程序的主要功能或运行我的任何代码之前,它似乎在 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>

任何人有什么建议可以从这里调试这个吗?

【问题讨论】:

    标签: windows debugging dll windbg


    【解决方案1】:

    跟进白痴的回答,你应该运行Process Monitor

    这个工具会告诉你你的进程做了什么,它尝试加载了哪些文件(并且可能至少有一个失败),以及错误是什么。

    它的作用不止于此,对于任何流程故障排除来说,它可以节省大量时间。

    【讨论】:

    • 这个工具终于能够确定问题出在哪里——缺少 glew32.dll 的执行权限
    【解决方案2】:

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

    【讨论】:

    • 我现在看到了解决方案……哇,我的心灵调试能力是对的!
    【解决方案3】:

    尝试使用依赖遍历器运行。 http://dependencywalker.com/

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

    【讨论】:

      【解决方案4】:

      如果我没记错的话,异常代码 c0000022 代表拒绝访问。通常,这意味着 Windows 阻止了对资源的访问,例如域控制器或驱动程序。

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

      【讨论】:

      • 宾果游戏! Cygwin 命令chmod a+x *.dll 解决了我的问题。
      猜你喜欢
      • 1970-01-01
      • 2012-09-10
      • 1970-01-01
      • 1970-01-01
      • 2011-10-15
      • 2015-09-02
      • 2016-10-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多