如何找到抛出EETypeLoadException的原因?

时间:2014-09-01 12:40:36

标签: c# c++ .net windows-runtime

我有一个Windows 8.1 WinRT(现代/城域)应用程序,部分是原生C ++,部分是.net(C#)

在某些时候,C ++部分正在调用设置为C#方法的委托,当调用此委托时抛出EETypeLoderException并且该方法未被调用,我想找出原因是什么这次失败。

委托指向的方法是在已经加载的.net程序集中,来自此程序集的代码 - 以及具有要调用方法的同一个类 - 已经运行(并且可能正在另一个中运行)抛出异常时的线程)

EETypeLoadException是一个本机非托管异常,它是由非托管代码抛出的(在msvcr120_clr0400.dll中),我只能使用非托管调试器来查看它,而调试器无法向我显示异常数据,因为它不知道EETypeLoadException类。

我无法捕获异常并从代码中提取数据,因为我没有它的头文件或任何超类。

融合日志查看器(FUSLOGVW)没有显示任何有用的内容,没有绑定错误,成功的绑定看起来并不相关。

Procmon没有显示任何访问丢失的dll的尝试

在UI线程或后台任务上运行代码并不会改变任何内容。

我甚至尝试查看异常对象的内存转储,并查看看似指针的任何内容,无法找到错误消息。

在本地计算机和模拟器中都会发生这种情况

我在Windows 8.1计算机上使用Visual Studio 2013更新3

1 个答案:

答案 0 :(得分:2)

看起来WinRT中的本机代码抛出的EETypeLoadException(即不是.net CLR)没有携带任何其他信息,也无法获得有关确切失败的信息