【问题标题】:CLR / VectoredExceptionHandler / StackOverflowException / MiniDumpWriteDumpCLR / VectoredExceptionHandler / StackOverflowException / MiniDumpWriteDump
【发布时间】:2017-07-03 03:11:16
【问题描述】:

仅针对 StackOverflow 异常,在从加载了 CLR 的进程配置 AddVectoredExceptionHandler 时,我正在努力创建 MiniDump。

我的处理程序被调用,.dmp 文件被创建,但 MiniDumpWriteDump 失败。

我没有问题为其他异常编写转储,例如访问冲突。如果没有加载 CLR 并且发生 StackOverflow-exceptin,那么我也成功写入了转储。

https://github.com/NicolaiNyberg/DbgSvcExtension 上提供了示例代码 其中 CrashHandler dll 项目配置处理程序,SoexCh.Cs 是从 C# 调用它的一个示例。

我的问题是:加载 CLR 后,未处理的异常处理程序会发生什么情况,从而阻止进程在 StackOverflow 异常事件中写入小型转储?

【问题讨论】:

  • 没有足够的堆栈空间允许 MiniDumpWriteDump() 完成它的工作。可靠的小型转储生成需要一个“保护进程”。喜欢 DebugDiag。
  • 谢谢汉斯。我刚刚阅读了您的答案,我意识到我的答案/解决方案是您建议的实施。

标签: c# winapi clr native dump


【解决方案1】:

从问题到答案的移动解决方案:

答案/解决方案:为了让 MiniDumpWriteDump 从损坏的堆栈(StackOverflow-exception)中成功,应该从 ExceptionHandler 发出信号的工作线程调用它。 CrashHandler 已使用此实现进行了更新。

【讨论】:

  • 实际上,它真的应该在一个单独的看门狗进程中(就像 Hans 在他的评论中建议的那样)。虽然单独的线程可能适用于 stackoverflow 错误,但它可能不足以处理可能破坏整个(目标/受害者)进程的 stat 破坏事物(如访问冲突)。
猜你喜欢
  • 1970-01-01
  • 2018-12-17
  • 1970-01-01
  • 1970-01-01
  • 2019-01-30
  • 1970-01-01
  • 2016-12-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多