堆栈帧检查示例

更新:2007 年 11 月

本示例演示如何在执行代码内的任何位置,以编程方式检索有关调用堆栈的信息。堆栈使您可以确定在应用程序到达当前过程之前执行的过程的顺序。

获取示例及其安装说明

  • 执行下列一项或多项操作:

    • 在“帮助”菜单上,单击“示例”。

      自述文件将显示有关示例的信息。

    • 访问 Visual Studio 2008 示例网站。该网站提供了最新版本的示例。

    • 在安装了 Visual Studio 的计算机上查找示例。默认情况下,示例和自述文件安装在驱动器号:\Program Files\Microsoft Visual Studio 9.0\Samples\lcid 中。对于 Visual Studio 的速成版,所有示例都可联机找到。

有关更多信息,请参见定位示例文件

安全说明:

此示例代码用于阐释概念,因此仅显示与此概念相关的代码。该代码可能不符合特定环境的安全要求,因此不应原样搬用所显示的代码。我们建议您添加安全性代码和错误处理代码,以使项目更加安全可靠。Microsoft“按原样”提供此示例代码,不提供任何保证。

运行此示例

  • 按 F5。

演示

.NET Framework 将此功能作为 StackFrame 类的一部分提供。该示例演示了另外两个类:StackTraceMethodInfoStackTrace 的无参数构造函数返回一组完整的 StackFrame 对象,提供了自应用程序启动以来的相关信息。您也可以使用带有 Exception 实例的 StackTrace 构造函数。该构造函数向触发异常的代码提供堆栈跟踪信息。

“测试过程堆栈”按钮的事件处理程序包含用于调用多个方法的代码,这些方法导致堆栈出现多层深度。单击“测试过程堆栈”按钮将会调用“ProcA”,后者然后调用“ProcB”。“ProcB”调用“GetFullStackFrameInfo”过程,传入一个新的 StackTrace 对象:

GetFullStackFrameInfo(New StackTrace()) 

在 GetFullStackFrameInfo 过程中,该代码使用 StackTrace 对象的 FrameCount 属性通过从当前过程向后执行方式,检索堆栈帧的总数。然后,该过程将有关每个堆栈帧的信息添加到示例的列表框中,并调用 GetFrame 方法来检索已建立索引的堆栈帧对象。

“GetStackFrameInfo”过程对代码发送的 StackFrame 对象调用 GetFrame,然后检索 MethodInfo 对象的属性以显示有关列表框中的过程的信息。

“测试异常处理”按钮的事件处理程序在堆栈的多层之下生成一个错误。该代码触发一个异常,并将该异常传递到 StackFrame 对象的构造函数。

请参见

参考

System.Diagnostics

StackFrame

System.Reflection

MethodInfo

FrameCount