C++ 如何从异常_记录中获取加载失败的文件名?

C++ 如何从异常_记录中获取加载失败的文件名?,c++,exception,exception-handling,seh,C++,Exception,Exception Handling,Seh,我注册了向量异常处理程序。使用article I设法从异常指针结构peExceptionInfo获取对象的名称: char* objectName = (char*)(((DWORD*****)pExceptionInfo->ExceptionRecord->ExceptionInformation[2])[3][1][1]+2) 我得到的对象名称是.PaveFileLoadException@。因此,据我所知,它未能加载某种文件。有没有办法从异常记录或任何其他结构中获取文件名?E

我注册了向量异常处理程序。使用article I设法从异常指针结构
peExceptionInfo
获取对象的名称:

char* objectName = (char*)(((DWORD*****)pExceptionInfo->ExceptionRecord->ExceptionInformation[2])[3][1][1]+2)

我得到的对象名称是
.PaveFileLoadException@
。因此,据我所知,它未能加载某种文件。有没有办法从异常记录或任何其他结构中获取文件名?

EEFileLoadException是一个非托管异常,它启动了.NET FileLoadException,一个托管异常。不,在没有调试器的情况下,没有已知的方法可以恢复该文件的信息。使用DebugDiag实用程序的托管调试器或使用AppDomain.UnhandledException事件。但是.NET FileLoadException如何包含无法加载的文件的信息?我以为它是从EXCEPTION_记录获取的,不是吗?不,它是从CLR状态获取的。使用WinDbg我发现异常是
无法加载文件或程序集“MyProj.XmlSerializers,Version=3.2.7428.0,Culture=neutral,PublicKeyToken=null”或其依赖项之一。系统找不到指定的文件。
。我可以猜测CLR负责加载这个dll,而不是OS,因此CLR将有关于dll的更多信息,而他无法加载,对吗?但是,因为我注册了VEH处理程序,它不应该接收整个异常描述吗?您不能在托管程序中可靠地使用VEH处理程序。NET也使用SEH,您将看到不应该查看或处理的异常。与此类似,搜索XML序列化程序通常会导致异常,如中所述。VEH是一个非常好的特性,充其量只能用于诊断工具。