为什么malloc/new捕获调用栈?
Why do malloc/new capture the callstack?
我有一个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.
相关文章:
- Malloc 在使用线程并行化 SSH 调用时存在问题
- 调用C#中的Cygwin GCC DLL挂在malloc上
- 在 malloc 之后检查 &在调用 free() 之前
- 从 JNI 调用的 DLL 从哪里获取其内存以进行分配,例如 Malloc
- 在C++中调用 malloc() 与"operator new"函数之间的实现差异
- 在使用新操作员和C 中的结构的调用构造函数时,获得内存损坏(Malloc)
- 无法调用使用 malloc/placement new 创建的类上的虚函数
- 如果在 C++ 中的 malloc() 之后调用 free() 则会出现错误
- malloc调用在一个看似很小的请求后失败
- 我是否可以阻止throw调用malloc
- 构造函数中的 Malloc 在通过 New 调用时返回 NULL
- 不同的输出调用clang上的malloc应用编译器选项-00和-03
- 为什么在malloc中没有调用构造函数
- 标准C++的哪些部分将调用malloc/free而不是new/delete
- posix_memalign / malloc 在第一次调用免费后分配较低的地址
- 为什么calloc调用可能导致内存损坏,malloc工作正常
- 从malloc()进行的Windows和Linux本机OS/系统调用是什么
- 为什么在调用 localtime() 函数之前不需要 malloc 结构 tm 指针?
- 在调用malloc之后,我得到了一个意外的大小
- realloc和calloc调用malloc吗?