更新:2007 年 11 月
分析 API 提供了两种方法来获取调用堆栈:允许以分散方式收集调用堆栈的堆栈快照方法,以及时刻跟踪调用堆栈的隐藏堆栈方法。本主题概述了这两种方法。
堆栈快照
堆栈快照是线程堆栈在某一时刻的描图。分析 API 支持在堆栈上跟踪托管函数,但它会将跟踪非托管函数的工作交给探查器自己的堆栈审核器来完成。
有关如何对探查器进行编程以审核托管堆栈的更多信息,请参见本文档集中的 ICorProfilerInfo2::DoStackSnapshot 方法,以及 MSDN Library 中的 Profiler Stack Walking in the .NET Framework 2.0: Basics and Beyond(.NET Framework 2.0 中的探查器堆栈审核:基础和超越)。
隐藏堆栈
过于频繁地使用快照方法可能会很快导致性能问题。如果您想要频繁进行堆栈跟踪,探查器应通过使用 FunctionEnter2、FunctionLeave2、FunctionTailcall2 和 ICorProfilerCallback2 异常回调改为生成隐藏堆栈。隐藏堆栈始终是最新的,并且可以在需要堆栈快照时随时快速复制到存储区。
隐藏堆栈可以获取函数参数、返回值以及有关泛型实例化的信息。只有通过隐藏堆栈才能使用此信息,并且可以在控制传递到函数时获取此信息。但是,此信息在稍后函数运行过程中可能不可用。
请参见
参考
ICorProfilerInfo2::SetEnterLeaveFunctionHooks2 方法