debugging c++调试异常c0000139

jmo0nnb3  于 2023-04-30  发布在  其他
关注(0)|答案(4)|浏览(417)

我目前正试图找到一个客户端崩溃与我们的应用程序之一的底部。我已经将应用程序 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。
我想知道是否有人可以提供建议,如何进一步跟踪这个问题,或者如果有人经历过这个问题,我很有兴趣听听你是如何解决的。
先谢谢你了
丰富

3wabscal

3wabscal1#

该异常代码是Entrypoint not found -某个东西试图加载DLL,而DLL无法找到它需要的所有DLL。
使用取决于。exe以显示DLL所需的内容。

ki1q1bka

ki1q1bka2#

启用加载器快照(gflags -i yourapp.exe +sls),并让它精确定位它未能找到/加载的库(在调试器下启动程序将吐出所有加载器诊断)。
或者,通过检查LoadLibraryExW调用的参数从崩溃转储中获取库的名称。

j5fpnvbx

j5fpnvbx3#

感谢所有的回复。
结果发现(至少这看起来是问题所在)我们有一个配置问题。一半的软件被设置为加载9i驱动程序,一半的软件预期加载10g驱动程序。
现在还为时尚早,我们需要对此进行测试,但看起来很有可能这就是原因。
干杯富

qncylg1j

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首先从应用程序文件夹,而不是系统文件夹。

相关问题