gpt4 book ai didi

c++ - 在进程外调用时 MiniDumpWriteDump 中的访问冲突

转载 作者:太空宇宙 更新时间:2023-11-04 13:27:58 26 4
gpt4 key购买 nike

The documentation of the MiniDumpWriteDump function指出

MiniDumpWriteDump should be called from a separate process if at all possible, rather than from within the target process being dumped.

所以我编写了一个小型 MFC 崩溃处理程序来执行此操作。我遵循了 this SO answer 中的建议由 Hans Passant 编写,即我将异常指针的值从崩溃程序传递到崩溃处理程序,即使异常指针在崩溃处理程序的上下文中无效。当我在调试版本中运行测试时,这很有效,但是当我切换到发布版本时,崩溃处理程序崩溃,在 MiniDumpWriteDump 函数内部发生访问冲突。

我被难住了。为什么这应该在调试版本中工作,而不是在发布版本中?这令人抓狂,因为访问冲突通常是访问无效指针的指标,而我在崩溃处理程序中收到的异常指针确实无效 - 但另一方面,我被告知这无关紧要,MiniDumpWriteDump 正在崩溃进程的上下文中解释指针(从指针的起源处)。

知道我可能做错了什么吗?

旁注:在他的回答中,Hans 提出了一个解决方案,其中 watchdog 进程是预启动的,然后进入休眠状态,并在崩溃进程触发时唤醒。我的解决方案略有不同:我只是在崩溃发生时启动崩溃处理程序,然后通过命令行参数将崩溃程序的必要信息传递给崩溃处理程序。我仔细检查了传递的信息是否正确,特别是异常指针。

最佳答案

我曾遇到过类似的问题,现在终于注意到出了什么问题。

MINIDUMP_EXCEPTION_INFORMATION 的 MSDN 文档声明如果 ExceptionPointers 地址来自目标进程而不是本地进程,则 ClientPointers 字段必须为 TRUE

正确设置此字段后,我可以简单地从崩溃进程中传递 ThreadIdExceptionPointers,将它们填充到转储中的 MINIDUMP_EXCEPTION_INFORMATION -编写过程,并且它完美运行。

关于c++ - 在进程外调用时 MiniDumpWriteDump 中的访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32691914/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com