为什么malloc/new会捕获callstack?

Ben*_*tto 3 c++ windows callstack heap-memory stack-unwinding

我有一个64位应用程序,在Server 2003下作为服务运行.

当我连接VS Profiler或windbg时,我看到很多像下面那样的callstack.我知道在调试器(或分析器)中产生的进程使用调试堆等...但事实并非如此,因为该服务是由OS启动的,我只附加到它.

我不明白它为什么要展开堆栈.分析器显示花费了大量时间.更多信息:

•这些是使用vc9构建的发行版,在Server 2003上运行.

•系统环境变量_NO_DEBUG_HEAP设置为1.

•我正在使用Microsoft符号服务器.

为什么要捕获堆栈跟踪?它似乎正在记录它...但我无法找到它.

我的目标是验证应用程序是否真正展开堆栈,如果确实如此,请尽量避免使用它.

有任何想法吗?


调用堆栈

ntdll!RtlVirtualUnwind
ntdll!RtlpWalkFrameChain
ntdll!RtlCaptureStackBackTrace
ntdll!RtlpCaptureStackTraceForLogging
ntdll!RtlLogStackBackTrace
ntdll!RtlDebugAllocateHeap
ntdll!RtlAllocateHeapSlowly
ntdll!RtlAllocateHeap
MSVCR90!malloc
MSVCR90!operator new
Run Code Online (Sandbox Code Playgroud)

Ste*_*end 6

有人可能使用gflags.exe为此进程或系统范围启用用户堆栈跟踪捕获,或者某些其他需要跟踪CRT分配操作的标志.

您应该能够使用此处的信息注册表中检查这种可能性.