堆栈帧检查示例
更新:2007 年 11 月
本示例演示如何在执行代码内的任何位置,以编程方式检索有关调用堆栈的信息。堆栈使您可以确定在应用程序到达当前过程之前执行的过程的顺序。
获取示例及其安装说明
执行下列一项或多项操作:
在“帮助”菜单上,单击“示例”。
自述文件将显示有关示例的信息。
访问 Visual Studio 2008 示例网站。该网站提供了最新版本的示例。
在安装了 Visual Studio 的计算机上查找示例。默认情况下,示例和自述文件安装在驱动器号:\Program Files\Microsoft Visual Studio 9.0\Samples\lcid 中。对于 Visual Studio 的速成版,所有示例都可联机找到。
有关更多信息,请参见定位示例文件。
安全说明: |
---|
此示例代码用于阐释概念,因此仅显示与此概念相关的代码。该代码可能不符合特定环境的安全要求,因此不应原样搬用所显示的代码。我们建议您添加安全性代码和错误处理代码,以使项目更加安全可靠。Microsoft“按原样”提供此示例代码,不提供任何保证。 |
运行此示例
- 按 F5。
演示
.NET Framework 将此功能作为 StackFrame 类的一部分提供。该示例演示了另外两个类:StackTrace 和 MethodInfo。StackTrace 的无参数构造函数返回一组完整的 StackFrame 对象,提供了自应用程序启动以来的相关信息。您也可以使用带有 Exception 实例的 StackTrace 构造函数。该构造函数向触发异常的代码提供堆栈跟踪信息。
“测试过程堆栈”按钮的事件处理程序包含用于调用多个方法的代码,这些方法导致堆栈出现多层深度。单击“测试过程堆栈”按钮将会调用“ProcA”,后者然后调用“ProcB”。“ProcB”调用“GetFullStackFrameInfo”过程,传入一个新的 StackTrace 对象:
GetFullStackFrameInfo(New StackTrace())
在 GetFullStackFrameInfo 过程中,该代码使用 StackTrace 对象的 FrameCount 属性通过从当前过程向后执行方式,检索堆栈帧的总数。然后,该过程将有关每个堆栈帧的信息添加到示例的列表框中,并调用 GetFrame 方法来检索已建立索引的堆栈帧对象。
“GetStackFrameInfo”过程对代码发送的 StackFrame 对象调用 GetFrame,然后检索 MethodInfo 对象的属性以显示有关列表框中的过程的信息。
“测试异常处理”按钮的事件处理程序在堆栈的多层之下生成一个错误。该代码触发一个异常,并将该异常传递到 StackFrame 对象的构造函数。