禁用.NET处理本机异常

时间:2013-03-19 22:21:49

标签: exception access-violation dump mixed-mode

我有一个调用混合模式C ++ dll的C#应用​​程序。我通过HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ Windows Error Reporting \ LocalDumps启用了转储生成。

当dll访问无效内存时,运行时将win32异常转换为受管System.AccessViolationException,并在生成转储之前解除堆栈,从而破坏本机堆栈信息。根据msdn的说法,我之前可以自己捕获异常.net获取它并手动生成转储,但是在已经损坏的程序上运行代码可能会挂起它。那么,我该如何禁用SEH翻译呢?

1 个答案:

答案 0 :(得分:1)

你不能禁用它。除非您捕获异常,否则CLR不会展开堆栈。确保你没有。这需要通过AppDomain.UnhandledException事件处理程序。你需要的基本功能是Marshal.GetExceptionPointers(),这是在你打开minidump时会查明异常的函数。

我会在this MSDN forum threadthis pinvoke.net snippet的答案中找到资源,应该足以让自己在一起。