我目前正试图找到一个客户端崩溃与我们的应用程序之一的底部。我已经将应用程序 Package 在一个异常处理程序中,当崩溃发生时,它会创建一个迷你转储。
应用程序崩溃,异常为c0000139(关于它的文档并不多)。
调用堆栈如下所示
ntdll.dll!_RtlRaiseStatus@4() + 0x26 bytes
ntdll.dll!_LdrpSnapThunk@32() + 0x26f48 bytes
ntdll.dll!_LdrpSnapIAT@16() + 0xd9 bytes
ntdll.dll!_LdrpHandleOneOldFormatImportDescriptor@16() + 0x7a bytes
ntdll.dll!_LdrpHandleOldFormatImportDescriptors@16() + 0x2e bytes
ntdll.dll!_LdrpWalkImportDescriptor@8() + 0x11d bytes
ntdll.dll!_LdrpLoadDll@24() - 0x265 bytes
ntdll.dll!_LdrLoadDll@16() + 0x110 bytes
kernel32.dll!_LoadLibraryExW@12() + 0xc8 bytes
odbc32.dll!_ODBCLoadLibraryEx@12() + 0x29 bytes
odbc32.dll!_LoadDriver@12() + 0x119f bytes
odbc32.dll!_SQLDriverConnectW@32() + 0x1be bytes
odbc32.dll!_SQLDriverConnect@32() + 0x125 bytes
看起来该程序试图创建一个数据库连接(通过ODBC连接到Oracle),但不知何故未能找到dll或找到了一个具有错误入口点的dll。
我想知道是否有人可以提供建议,如何进一步跟踪这个问题,或者如果有人经历过这个问题,我很有兴趣听听你是如何解决的。
先谢谢你了
丰富
4条答案
按热度按时间3wabscal1#
该异常代码是Entrypoint not found -某个东西试图加载DLL,而DLL无法找到它需要的所有DLL。
使用取决于。exe以显示DLL所需的内容。
ki1q1bka2#
启用加载器快照(gflags -i yourapp.exe +sls),并让它精确定位它未能找到/加载的库(在调试器下启动程序将吐出所有加载器诊断)。
或者,通过检查LoadLibraryExW调用的参数从崩溃转储中获取库的名称。
j5fpnvbx3#
感谢所有的回复。
结果发现(至少这看起来是问题所在)我们有一个配置问题。一半的软件被设置为加载9i驱动程序,一半的软件预期加载10g驱动程序。
现在还为时尚早,我们需要对此进行测试,但看起来很有可能这就是原因。
干杯富
qncylg1j4#
在我自己的情况下,我有类似的问题。
根本原因就是这样。dll是从不正确的路径加载的-
python27.dll
驻留在C:\Windows\System32
(% 1)和本地应用程序目录(% 2)中。加载了来自(1)的Dll,导致发生进一步的
(ntdll.dll) in testhost.net472.exe: 0xC0000139: Entry Point Not Found.
异常。修复相当简单:
LoadLibrary(libname);
改为:
LoadLibraryExW(libname, nullptr, LOAD_WITH_ALTERED_SEARCH_PATH);
这是修改。dll搜索顺序查找。dll首先从应用程序文件夹,而不是系统文件夹。