如何获取所有局部变量的转储?

Ska*_*osh 20 c# asp.net aop exception-handling

发生异常时,如何获取所有本地和会话变量的转储?我正在考虑编写某种基于反射的函数,该函数将询问调用函数并创建变量和值的转储.

我可以使用现有的库吗?

UPDATE

在与同事交谈后,我被指向AOP或面向方面编程.这就是我的理解......使用AOP,可以简单地用某些属性修饰方法和类.然后,AOP框架在这些类和方法中或周围注入代码.有两种不同的框架,一种是注入代码然后编译程序集,第二种只是使用反射和陷阱你已经装饰的调用,并在运行时包装方法周围的代码.

我希望所有这些都有道理.我将对此进行更多研究并发布我的方法.

多谢你们 ...

Tim*_*ter 14

我不确定这是不是你要找的东西.但是,如果您处于catch-block中,则可以通过以下方式获取此类的所有字段和属性:

try
{
    double d = 1 / 0;
}
catch (Exception ex)
{
    var trace = new System.Diagnostics.StackTrace();
    var frame = trace.GetFrame(1);
    var methodName = frame.GetMethod().Name;
    var properties = this.GetType().GetProperties();
    var fields = this.GetType().GetFields(); // public fields
    // for example:
    foreach (var prop in properties)
    {
        var value = prop.GetValue(this, null);
    }
    foreach (var field in fields)
    {
        var value = field.GetValue(this);
    }
    foreach (string key in Session) 
    {
        var value = Session[key];
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经展示了如何获取方法名称,只是出于完整性而发生异常.

使用BindingFlags,您可以指定约束,例如,您只需要此类的属性而不是继承的属性:

在.NET Reflection中使用GetProperties()和BindingFlags.DeclaredOnly

当然上面的内容应该只给你一个起点如何手动完成,你应该将所有内容封装到类中.我自己从未使用它,所以它没有经过测试.