我有一个64位应用程序,在Server 2003下以服务形式运行。
当我附加VS Profiler或windbg时,我看到很多像下面这样的调用堆栈。我知道在调试器(或分析器)中生成的进程使用调试堆等...但是这不是情况,因为此服务由操作系统启动,我只是附加它。
我不明白为什么它会展开堆栈。并且分析器显示在这样做时花费了可观的时间。一些更多的信息:
• 这些是使用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