【发布时间】:2012-06-08 14:07:10
【问题描述】:
我们的应用程序因以下错误而崩溃。
===========================================================
VERIFIER STOP 00000003: pid 0x2E54: multithreaded access in HEAP_NO_SERIALIZE heap
00161000 : Heap handle
00001444 : Thread owning heap lock
00003188 : Current thread trying to acquire the heap lock
00000000 :
===========================================================
我们为应用程序启用了整页堆。应用程序在随机位置崩溃。通常崩溃位置是STL 的内部。在所有情况下,调用堆栈似乎都已损坏。
应用程序使用库和 DLL 文件列表。所有 DLL 文件和库均使用多线程 DLL 库(命令行选项/MD)构建。
其中一个库正在使用HeapAlloc 方法在堆中分配内存。
我应该使用什么技术来识别崩溃?
【问题讨论】:
-
不确定它是否有帮助,但Here 是我写给另一张海报的关于如何使用 WinDbg 的答案。
-
您需要的信息在 VERIFIER STOP 消息中。您有两个线程同时访问非序列化堆,这是不允许的。这两个线程分别是 1444 和 3188。您需要更改程序,使两个线程不会尝试同时访问同一个堆。