我可以从当前执行的函数中按程序获取参数名称/值吗?

2023-12-25

我想做这样的事情:

public MyFunction(int integerParameter, string stringParameter){
    //Do this:
    LogParameters();
    //Instead of this:
    //Log.Debug("integerParameter: " + integerParameter + 
    //          ", stringParameter: " + stringParameter);

}

public LogParameters(){
    //Look up 1 level in the call stack (if possible),
    //Programmatically loop through the function's parameters/values
    //and log them to a file (with the function name as well).
    //If I can pass a MethodInfo instead of analyzing the call stack, great.
}

我什至不确定我想要做什么是可能的,但是如果能够在运行时自动将参数名称/值输出到文件而无需显式编写代码来记录它们,那就太好了。

是否可以?


我意识到人们链接到其他提到 PostSharp 的问题,但我忍不住发布解决我的问题的代码(使用 PostSharp),以便其他人可以从中受益。

class Program {
    static void Main(string[] args) {
        Trace.Listeners.Add(new TextWriterTraceListener(Console.Out));
        new MyClass().MyMethod(44, "asdf qwer 1234", 3.14f, true);
        Console.ReadKey();
    }
}
public class MyClass {
    public MyClass() {
    }
    [Trace("Debug")]
    public int MyMethod(int x, string someString, float anotherFloat, bool theBool) {
        return x + 1;
    }
}
[Serializable]
public sealed class TraceAttribute : OnMethodBoundaryAspect {
    private readonly string category;

    public TraceAttribute(string category) {
        this.category = category;
    }

    public string Category { get { return category; } }

    public override void OnEntry(MethodExecutionArgs args) {
        Trace.WriteLine(string.Format("Entering {0}.{1}.", 
                                      args.Method.DeclaringType.Name, 
                                      args.Method.Name), category);

        for (int x = 0; x < args.Arguments.Count; x++) {
            Trace.WriteLine(args.Method.GetParameters()[x].Name + " = " + 
                            args.Arguments.GetArgument(x));
        }
    }

    public override void OnExit(MethodExecutionArgs args) {
        Trace.WriteLine("Return Value: " + args.ReturnValue);

        Trace.WriteLine(string.Format("Leaving {0}.{1}.", 
                                      args.Method.DeclaringType.Name, 
                                      args.Method.Name), category);
    }
} 

只需添加Trace方法的属性将导致输出非常好的调试信息,如下所示:

Debug: Entering MyClass.MyMethod. 
x = 44
someString = asdf qwer 1234
anotherFloat = 3.14
theBool = True
Return Value: 45
Debug: Leaving MyClass.MyMethod.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以从当前执行的函数中按程序获取参数名称/值吗? 的相关文章

  • 机器Epsilon精度差异

    我正在尝试计算 C 中双精度数和浮点数的机器 epsilon 值 作为学校作业的一部分 我在 Windows 7 64 位中使用 Cygwin 代码如下 include
  • free 和 malloc 在 C 中如何工作?

    我试图弄清楚如果我尝试 从中间 释放指针会发生什么 例如 看下面的代码 char ptr char malloc 10 sizeof char for char i 0 i lt 10 i ptr i i 10 ptr ptr ptr pt
  • 如何从本机 C(++) DLL 调用 .NET (C#) 代码?

    我有一个 C app exe 和一个 C my dll my dll NET 项目链接到本机 C DLL mynat dll 外部 C DLL 接口 并且从 C 调用 C DLL 可以正常工作 通过使用 DllImport mynat dl
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • 枚举扩展方法

    在vs2008中 是否可以编写适用于任何枚举的扩展方法 我知道您可以针对特定枚举编写扩展方法 但我希望能够使用单个扩展方法对每个枚举进行处理 这可能吗 是的 只需针对基础进行编码Enum类型 例如 public static void So
  • C# 列表通用扩展方法与非通用扩展方法

    这是一个简单的问题 我希望 集合类中有通用和非通用方法 例如List
  • 如何获取 EF 中与组合(键/值)列表匹配的记录?

    我有一个数据库表 其中包含每个用户 年份组合的记录 如何使用 EF 和用户 ID 年份组合列表从数据库获取数据 组合示例 UserId Year 1 2015 1 2016 1 2018 12 2016 12 2019 3 2015 91
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • C# - 当代表执行异步任务时,我仍然需要 System.Threading 吗?

    由于我可以使用委托执行异步操作 我怀疑在我的应用程序中使用 System Threading 的机会很小 是否存在我无法避免 System Threading 的基本情况 只是我正处于学习阶段 例子 class Program public
  • 如何定义一个可结构化绑定的对象的概念?

    我想定义一个concept可以检测类型是否T can be 结构化绑定 or not template
  • LINQ:使用 INNER JOIN、Group 和 SUM

    我正在尝试使用 LINQ 执行以下 SQL 最接近的是执行交叉联接和总和计算 我知道必须有更好的方法来编写它 所以我向堆栈团队寻求帮助 SELECT T1 Column1 T1 Column2 SUM T3 Column1 AS Amoun
  • 引用的程序集自动由 Visual Studio 替换

    我有 2 个项目 一个可移植类库和一个常规单元测试项目 在可移植类库中 我使用 NuGet 来引用 Microsoft BCL 可移植包 它附带 2 个程序集 System Threading Tasks dll and System Ru
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置
  • 现代编译器是否优化乘以 1 和 -1

    如果我写 template
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat

随机推荐

  • 新手:了解 main 和 IO()

    在学习 Haskell 时 我想知道何时执行 IO 操作 我在几个地方发现了这样的描述 I O 操作的特殊之处在于 如果它们落入主函数中 就会执行它们 但在下面的示例中 greet 永远不会返回 因此不应打印任何内容 import Cont
  • 更改所有页面的文本方向

    我正在开发一个可以使用多种语言的网络项目 我已经完成了所有这些 我还有一件事 以英文显示时的页面是从左到右 我网站上的某些语言需要从右到左 请注意 我的问题是关于整个页面而不是字段中的文本 请问我该怎么做 我使用此代码来启动多种语言的线程
  • 如何在 Rails 4 中查询数组列?

    我找不到关于如何查询的好文章array columns在 Rails 中 我遇到需要查询 Rails 中的数组列 我从一篇教授如何进行基本查询的文章中找到here http blog arkency com 2014 10 how to s
  • 如何在 MySQL 中调度存储过程

    我有这个存储过程 例如 我如何以 5 秒的间隔运行它 就像删除时间戳超过一天的数据的例程一样 DROP PROCEDURE IF EXISTS delete rows links GO CREATE PROCEDURE delete row
  • 如何用零替换交叉表查询中的空值?

    基于 Access 中的以下 SQL TRANSFORM Sum Shape Length 5280 AS MILES SELECT ONSHORE AS Type Sum qry CurYrTrans Miles AS Total Of
  • Android 的 SceneKit 等效项是什么? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我创建了一个ARKit https developer apple com augmented rea
  • 有没有办法在 R Markdown 中的嵌入式 LaTeX 方程中使用 r 代码的结果

    有没有类似的命令 Sexpr可以在 R Markdown 文档中的嵌入式 LaTeX 方程中使用吗 我想用这样的东西形成一个简单的线性回归方程 hat Y Sexpr coef model 1 Sexpr coef model 2 cdot
  • 从android中的SeekBar获取值

    我如何从 a 获取值SeekBar 我有一个具有三个 SeekBar 的类的代码 PRICEbar 我想将这些 SeekBars 的值传递给下一个 Activity 屏幕 作为意图 我知道如何实现 OnClickListener 但如何提取
  • Django:DetailView从外键获取对象

    我的模型事件有一个基于类的 DetailView 并且想要显示通过外键相关的类别条目 模型 py class Event models Model name models CharField max length 50 def get ab
  • Subversion 中的 Mercurial:移动、重命名和标签

    我有一个具有以下布局的 subversion 存储库 svnrepo projectA trunk svnrepo projectA tags svnrepo projectA branches svnrepo projectB trunk
  • 如果显式使用同一模块中的类型,则 Prism 框架不会加载模块

    我们有一个使用 prism 5 框架的 WPF 应用程序 使用 DirectoryModuleCatalog 加载模块 同时 如果我引用引导程序所在的启动项目中的模块之一并使用其中的类型 则该模块将被跳过加载 看起来 prism 框架正在跳
  • 关于 Z3 for Java 的性能问题

    我在当前使用 Z3 for Java 的项目中遇到了一些性能问题 基本上我当前的大多数限制都非常简单 例如 f x 2 f y lt 3 f x lt 5 我正在使用整个项目共享的静态上下文和解算器实例 public class Const
  • 如何从服务器发送数据到Android?

    我正在开发一个项目 我希望我的服务器向我的应用程序发送一些数据 无需从移动设备调用 Web 服务 它就像一个网络面板 可以操作移动应用程序来添加数据 因此 当用户在网站中添加数据并单击 添加 时 应该将该数据添加到移动应用程序 如果移动设备
  • QEMU、无可启动设备、Linux 的 Windows 子系统

    我正在学习如何构建基本的操作系统内核https intermezzos github io https intermezzos github io 我已经创建了我的 iso文件 我现在正在运行qemu system x86 64 cdrom
  • 如何在“共享”(git 管理)Xcode 项目中使用“私有”.xcconfig?

    通常 我会使用现有的 xcconfig在某些子模块中 以简化 Xcode 工作区 或项目 中某些 git 子模块 或我自己的 Xcode 子项目 之一 的集成 这非常有效 并且减少了对可能存在的项目进行大量本地配置更改的需要在其自己的 或者
  • 将扁平化的键->值对转换为嵌套对象

    将以下键 gt 值对象 数组 转换为正确的 JSON 样式对象的最简单方法是什么 下面的示例将输入转换为图表 var input graph default seriesColor cccccc 3c3c3c graph default s
  • 软件安装时如何生成数据库后端?

    我开发了一个带有 SQL SERVER 后端的小型应用程序 并且还使用 Indigo Rose 安装工厂 8 0 为该应用程序制作了一个安装程序 我需要的是我想在应用程序安装过程中自动创建具有特定用户帐户的数据库后端 在安装程序之前 系统会
  • 使用一个查询通过 wp_query 搜索多个关键字

    我使用这个 wp query 来获取特定关键字的结果并按价格排序 我需要同时搜索多个关键词并返回结果并按产品价格排序 如何使用一个 wp query 实现这一点 例如有三个标题记录 我在这里很好谢谢我很好 谢谢我现在很好 如果我搜索文本 m
  • 给定最大匹配,找到二分图的最小顶点覆盖

    我似乎找到了一种算法 但无法理解它 我想知道你们中是否有人知道该算法的一般概要 这是我在第 2 页找到的算法的链接 http www cse iitb ac in sundar cs435 lecture23 pdf http www cs
  • 我可以从当前执行的函数中按程序获取参数名称/值吗?

    我想做这样的事情 public MyFunction int integerParameter string stringParameter Do this LogParameters Instead of this Log Debug i