Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I find the reason EETypeLoadException was thrown?

I have a Windows 8.1 WinRT (modern/metro) application that is partly native C++ and partly .net (C#)

At some point the C++ part is calling a delegate that is set to a C# method, when this delegate is called an EETypeLoderException is thrown and the method isn't called, I want to find out what is the reason for this failure.

The method the delegate is pointing to is in a .net assembly that is already loaded, code from this assembly - and the same class that has the to-be-called method - has already ran (and possibly is running in another thread at the time the exception is thrown)

The EETypeLoadException is a native unmanaged exception, it is thrown by unmanaged code (in msvcr120_clr0400.dll), I can only use the unmanaged debugger to look at it and that debugger can't show me data from the exception because it doesn't know about the EETypeLoadException class.

I can't catch the exception and extract data from it in code because I don't have the header files for it or any of its super classes.

The fusion log viewer (FUSLOGVW) isn't showing anything useful, no bind errors, successful bindings don't look related.

Procmon doesn't show any attempt to access a missing dll

Making the code run on the UI thread or a background task doesn't change anything.

I even tries looking at the memory dump of the exception object and following anything that looks like a pointer, couldn't find an error message.

This happens both on the local machine and in the simulator

I'm using Visual Studio 2013 update 3 on a Windows 8.1 machine

like image 349
Nir Avatar asked Sep 01 '14 12:09

Nir


1 Answers

It looks like EETypeLoadException thrown by native code in WinRT (that is, not the .net CLR) does not carry any additional information and it's not possible to get the information about what exactly has failed

like image 130
Nir Avatar answered Oct 25 '22 18:10

Nir