当前位置: 首页 > news >正文

StackTrace在.Net中获取当前线程的堆栈跟踪信息

  • StackTrace的主要功能

1. 捕获调用堆栈信息:可以获取堆栈中的各个方法调用的详细信息。

2. 访问堆栈帧:可以获取每个堆栈帧中的方法、文件名和行号等信

  • StackTrace的使用

1. 创建StackTrace对象

using System.Diagnostics;
//创建一个StackTrace对象,捕获当前线程的堆栈信息
StackTrace stackTrace = new StackTrace();

2. 获取堆栈信息 

//获取堆栈跟踪的字符串表示
string stackTracingString=stackTrace.ToString();
Console.WriteLine(stackTracingString);

3. 获取堆栈帧中的信息

//获取所有堆栈帧
StackFrame[] stackFrames = stackTrace.GetFrames();
foreach (StackFrame frame in stackFrames)
{Console.WriteLine("Method:"+frame.GetMethod().Name);Console.WriteLine("File:"+frame.GetFileName);Console.WriteLine("Line:"+frame.GetFileLineNumber);
}
  •  示例

示例描述:程序运行过程中获取以下信息:1. 调用之间的调用关系。2.打印当前线程的对阵跟踪信息以及每个堆栈帧的详细信息。 

 1. 定义方法1:在方法中打印所有的堆栈信息

using System.Diagnostics;namespace PracticeProjects.Logic
{public class StackTest{public static void testc(){StackTrace stackTrace = new StackTrace(); //获取堆栈跟踪的字符串表示string stackTracingString=stackTrace.ToString();Console.WriteLine(stackTracingString);//获取所有堆栈帧StackFrame[] stackFrames = stackTrace.GetFrames();foreach (StackFrame frame in stackFrames){Console.WriteLine("Method:"+frame.GetMethod().Name);Console.WriteLine("File:"+frame.GetFileName);Console.WriteLine("Line:"+frame.GetFileLineNumber);}}}
}

 2. 定义方法2:打印该方法的调用方与此方法之间的调用关系

using System.Diagnostics;
namespace PracticeProjects.Logic
{public class DataOperation{public static void AddNums(int a, int b){var stack = new StackTrace(false);//创建一个StackTrace实例,true表示想收集源文件信息,比如文件名和行号,设置为true会影响性能,一般用不到var callerframe = stack.GetFrame(1);//获取调用栈中的特定帧。0表示当前方法,1表示上一个方法var callerMethodName = callerframe.GetMethod().Name;//获取该方法的名称var callerMethodClass = callerframe.GetMethod().DeclaringType;//获取方法所在的类var currentFrame= stack.GetFrame(0);var currenMethod=currentFrame.GetMethod();//打印该方法的调用方与该方法之间的调用关系//PracticeProjects.Controllers.DbOperateController.NumOperation--调用-->PracticeProjects.Logic.DataOperation.AddNumsConsole.WriteLine(callerMethodClass+"."+callerMethodName + "--调用-->"+ currenMethod.DeclaringType+"."+ currenMethod.Name);StackTest.testc();}}
}

3. controller实现一个接口

[HttpGet]
public void NumOperation(int a,int b)
{DataOperation.AddNums(a, b);
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 深入探索Go语言中的函数:匿名函数、指针参数与函数返回
  • Spring Cloud(一)
  • React第四章(babel)
  • python知识点100篇系列(17)-替换requests的python库httpx
  • [项目][WebServer][TcpServer]详细讲解
  • nnunetv2系列:解压zip文件到nnunet默认路径
  • Windows下Python和PyCharm的应用(二)__快捷键方式的设定
  • 前端框架有哪些?全面解析主流前端框架
  • 深入解析五大 LLM 可视化工具:Langflow、Flowise、Dify、AutoGPT UI 和 AgentGPT
  • 出现 E: Sub-process /usr/bin/dpkg returned an error code (1) 解决方法 (全面分析)
  • [SWPU2019]Web1 超详细教程
  • PMP--一模--解题--1-10
  • 前端网络请求库:Axios
  • Docker中部署.NetCore项目
  • 结构型模式-python版
  • [case10]使用RSQL实现端到端的动态查询
  • [NodeJS] 关于Buffer
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • docker容器内的网络抓包
  • express.js的介绍及使用
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • JSONP原理
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • Meteor的表单提交:Form
  • nginx 配置多 域名 + 多 https
  • Octave 入门
  • OSS Web直传 (文件图片)
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • Spring Cloud Feign的两种使用姿势
  • 从PHP迁移至Golang - 基础篇
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 聊聊redis的数据结构的应用
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 用Python写一份独特的元宵节祝福
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • #if等命令的学习
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • $().each和$.each的区别
  • %@ page import=%的用法
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (Python第六天)文件处理
  • (二十三)Flask之高频面试点
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (强烈推荐)移动端音视频从零到上手(下)
  • (十一)手动添加用户和文件的特殊权限
  • (五)关系数据库标准语言SQL
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验