2010-02-06 94 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/

它執行依賴關係的靜態分析,它也可以跟蹤應用程序的啓動。

相關問題