- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果堆分配/取消分配/重新分配在另一个线程中进行,DbgHelp 库的 MiniDumpWriteDump() 将挂起。这是调用堆栈:DbgHelp 暂停其他线程,然后无限期地等待这些线程获得的互斥量。
ntdll.dll!NtWaitForAlertByThreadId() Unknown
ntdll.dll!RtlpWaitOnAddressWithTimeout() Unknown
ntdll.dll!RtlpWaitOnAddress() Unknown
ntdll.dll!RtlpWaitOnCriticalSection() Unknown
ntdll.dll!RtlpEnterCriticalSectionContended() Unknown
ntdll.dll!RtlEnterCriticalSection() Unknown
ntdll.dll!RtlpReAllocateHeap() Unknown
ntdll.dll!RtlpReAllocateHeapInternal() Unknown
ntdll.dll!RtlReAllocateHeap() Unknown
ntdll.dll!LdrpSetAlternateResourceModuleHandle() Unknown
ntdll.dll!LdrResGetRCConfig() Unknown
ntdll.dll!LdrpResSearchResourceMappedFile() Unknown
ntdll.dll!LdrResSearchResource() Unknown
KernelBase.dll!FindVersionResourceSafe() Unknown
> KernelBase.dll!GetFileVersionInfoSizeExW() Unknown
dbgcore.dll!Win32LiveSystemProvider::GetImageVersionInfo(void *,unsigned short const *,unsigned __int64,struct tagVS_FIXEDFILEINFO *) Unknown
dbgcore.dll!GenAllocateModuleObject(struct _MINIDUMP_STATE *,struct _INTERNAL_PROCESS *,unsigned short *,unsigned __int64,unsigned long,struct _INTERNAL_MODULE * *) Unknown
dbgcore.dll!GenGetProcessInfo(unsigned long,struct _MINIDUMP_STATE *,struct _INTERNAL_PROCESS * *,struct _LIST_ENTRY *) Unknown
dbgcore.dll!MiniDumpProvideDump() Unknown
dbgcore.dll!MiniDumpWriteDump() Unknown
您是否知道针对这种情况的简单解决方法?我可以看到一种解决方法,即向我的应用程序中的所有其他线程注入(inject)检查,以查看是否请求了核心转储,然后在没有获得互斥体的地方暂停。但这是一个很大的变化,而且应用程序的一些线程不受我的控制,因为它们是由我供内部使用的库启动的。
最佳答案
从广义上讲,MiniDumpWriteDump
执行两个操作:
第一步挂起每个线程,不管它当前在做什么。如果它碰巧持有对共享资源的独占访问权,它将无限期地持有它。只有一种单一、可靠的方式来调用MiniDumpWriteDump ,如文档所示:
MiniDumpWriteDump
should be called from a separate process if at all possible, rather than from within the target process being dumped. This is especially true when the target process is already not stable. For example, if it just crashed. A loader deadlock is one of many potential side effects of calling MiniDumpWriteDump from within the target process.
文档没有列出此 API 可能导致死锁的所有可能方式。在您的情况下,您似乎暂停了一个正在从堆分配内存的线程。默认情况下,堆是同步的。随着 MiniDumpWriteDump
的进行,它还尝试分配堆内存。为此,它请求堆同步对象。但它永远不会被释放,因为它只是暂停了拥有对它的独占访问权限的线程。
同样,这只是此 API 死锁的一种单一方式,当从同一进程中调用时,它被指示转储。有很多很多其他机会可以实现这一点。
解决方法:放在外部进程中。
关于c++ - MiniDumpWriteDump() 挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62632898/
我想使用 MiniDumpWriteDump 为我的应用程序生成崩溃日志。 Microsoft 建议从另一个进程执行转储,这正是我正在尝试做的。我遇到的问题是将 PEXCEPTION_INFORMAT
TL;DR 为同一个崩溃事件编写多个转储是否有意义,如果是,您需要注意什么。 我们正在使用 MiniDumpWriteDump当我们的应用程序中存在未处理的异常/中止/younameit 时写入故障转
如果堆分配/取消分配/重新分配在另一个线程中进行,DbgHelp 库的 MiniDumpWriteDump() 将挂起。这是调用堆栈:DbgHelp 暂停其他线程,然后无限期地等待这些线程获得的互斥量
如果堆分配/取消分配/重新分配在另一个线程中进行,DbgHelp 库的 MiniDumpWriteDump() 将挂起。这是调用堆栈:DbgHelp 暂停其他线程,然后无限期地等待这些线程获得的互斥量
我正在尝试创建一个简单的 C++ 控制台应用程序,它转储给定进程的内存空间(例如 calc.exe)所以我使用 MiniDumpWriteDump功能 代码如下: DWORD procID = 115
我正在尝试转储一个进程,例如 calc.exe 当我运行我的程序时,我得到 Program received signal SIGSEGV, Segmentation fault. 0x0000000
我正在尝试创建一项服务,目的是监控我公司创建的应用程序。 当应用进入无响应状态时,服务必须使用 MiniDumpWriteDump 生成一个转储。 问题是:当使用另一个进程的HANDLE时,MiniD
我想使用 MiniDumpWriteDump 函数创建一些自定义转储文件(主要是,我想导出一个包含线程调用堆栈的最少信息量的转储文件),但是我在定义需要的结构时遇到困难作为参数传递给回调函数 [Str
我有一个正在维护的大型 Win32 程序,我想对其进行检测,以便在发生不良情况时自动且无条件地生成小型转储文件。我不能要求客户安装userdump.exe,我不能要求他们安装visual studio
The documentation of the MiniDumpWriteDump function指出 MiniDumpWriteDump should be called from a sepa
我一直在使用 MiniDumpWriteDump 在崩溃时生成转储文件。我一直在尝试进行完整的内存转储。这似乎有效,并按预期生成了一个大文件。 但是,当我将这个巨大的文件加载到 Visual Stud
不久前,我们了解到即使发布版本也可能无法正常运行 - 可能会下降 - 可能会挂起等等。所以我们决定实现转储创建过程。在 Internet 上很快找到了所有步骤。但是一个——主要的事情——对我们来说仍然
我检查了 MSDN 上 MiniDumpWriteDump() 方法的定义如下: BOOL WINAPI MiniDumpWriteDump( __in HANDLE hProcess, _
我是一名优秀的程序员,十分优秀!