为什么malloc/new捕获调用栈?

Why do malloc/new capture the callstack?

本文关键字:调用 malloc new 为什么      更新时间:2023-10-16

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

当我附加VS Profiler或windbg时,我看到许多像下面这样的调用栈。我理解在调试器(或分析器)中生成的进程使用调试堆等…但事实并非如此,因为该服务是由操作系统启动的,我只是附加到它。

我不明白为什么要展开堆栈。分析器显示,在这方面花费的时间是可测量的。更多信息:

•这些是使用vc9构建的发布位,运行在Server 2003上。

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

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

为什么要捕获堆栈跟踪?它似乎正在记录它…但是我找不到。

我的目标是验证应用程序是否真的展开了堆栈,如果是真的,尽量避免它。

任何想法?


<标题> Callstack h1> div class="answers">

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

您应该能够在注册表中使用这里的信息检查这种可能性。

Steve的回答很好,经过长时间的调查,最终为我们自己的服务器找到了解决方案。我们的情况略有不同,堆栈捕获的原因是由于脚本定期运行UMDH捕获。UMDH将在第一次对该进程执行时启用堆栈收集。它给出以下警告:

 UMDH has enabled allocation stack collection for the current running process.