C# 第一次机会例外,微软C++;异常:EEFileLoadException位于内存位置 我正在研究一个C++ DLL,它是一个更大的项目的一部分,应用程序是用C语言编写的。

C# 第一次机会例外,微软C++;异常:EEFileLoadException位于内存位置 我正在研究一个C++ DLL,它是一个更大的项目的一部分,应用程序是用C语言编写的。,c#,c++,dll,first-chance-exception,C#,C++,Dll,First Chance Exception,最近我显示了一个Microsoft Visual Studio错误。我正在用VisualStudio调试该项目,我已附加到该过程。我在DllMain中有一个断点,但它在到达该断点之前崩溃,将显示一个对话框,其中包含: First-change exception at 0x74372ea2 in ........Service.exe: Microsoft C++ exception EEFileLoadException at memory location 0x039bc4d

最近我显示了一个Microsoft Visual Studio错误。我正在用VisualStudio调试该项目,我已附加到该过程。我在DllMain中有一个断点,但它在到达该断点之前崩溃,将显示一个对话框,其中包含:

    First-change exception at 0x74372ea2 in ........Service.exe:
    Microsoft C++ exception EEFileLoadException at memory location 0x039bc4d4..
如果单击“中断”按钮,将显示调用堆栈:

[下面的帧可能不正确和/或丢失,没有为KernelBase.dll加载符号]
KernelBase.dll!74372ea2()
clr.dll!50bc454d()
clr.dll!50afc3ee()
clr.dll!50afc41d()
clr.dll!50afc440()
clr.dll!50b415a4()
clr.dll!50b1a8dc()
clr.dll!50b1a476()
clr.dll!50b1e0c4()
clr.dll!50b161b0()
clr.dll!50b238aa()
clr.dll!50b1f739()
clr.dll!50b1f739()
clr.dll!50b1c090()
clr.dll!50b22caf()
clrjit.dll!68971939()
clrjit.dll!689922a5()
clrjit.dll!68989fed()
clrjit.dll!689749d5()
clr.dll!50b1fecf()
clr.dll!50b1ffac()
clr.dll!50b1fff1()
clr.dll!50b2024f()
内核32.dll!76933a61()
内核32.dll!76933a61()
clr.dll!50adf405()
clr.dll!50adf35f()
clr.dll!50b209bf()
clr.dll!50b21780()
clr.dll!50adef11()
mscorlib.ni.dll!78fda29d()
mscorlib.ni.dll!790214a2()
mscorlib.ni.dll!790213d6()
mscorlib.ni.dll!79021391()
mscorlib.ni.dll!78fda1f8()
clr.dll!50adea56()
clr.dll!50af93ef()
clr.dll!50af9673()
clr.dll!50c3ecfd()
clr.dll!50afb213()
clr.dll!50afb27d()
clr.dll!50ae1c81()
clr.dll!50adf405()
clr.dll!50ae1c81()
clr.dll!50ae1e80()
clr.dll!50bd4917()
内核32.dll!769395e4()
ntdll.dll!774d241a()
ntdll.dll!774d23e9()

我能做些什么来帮助我追踪问题所在

[编辑]根据建议,我做了以下工作:

    Tools / Options / Debugging / Symbols
我指定了与DLL位置相同的(.pdb)位置:

    C:\Edwards\Scada\Agent Service\
我还检查了路径,以确保它是正确的,遗憾的是没有区别


[编辑2]更多信息,该项目的C#部分正在Visual Studio 2010中开发。C++部分在VisualStudio 2008中。我无法控制这一点。

通过启用符号服务器:工具>选项>调试>符号,使这样的堆栈跟踪可读。通过更改调试器类型来调试托管异常:项目>属性>调试>调试器类型=混合。这里98%的情况是实时编译器(clrjit.dll)无法找到程序集,FileNotFound是第三个布尔值。请确保CLR宿主代码中的错误处理足以为这样一个基本的灾难生成一个适当的诊断。@HansPassant,尝试了这个,没有更改,我还检查了我提供给对话框的路径,以及每个DLL的PDB是否正确。当然,启用符号服务器时会有更改。你走的每一条捷径都会花费你额外的一天来解决这个问题。谷歌“什么是第一次机会例外”来找出下一步该做什么。@HansPassant,谢谢你,我不再向前看了。