如何获得所有局部变量的转储
本文关键字:转储 局部变量 何获得 | 更新日期: 2023-09-27 18:28:27
如何获得所有本地&发生异常时的会话变量?我正在考虑写一些基于反射的函数,它会询问调用函数&创建变量转储&价值观
我可以使用现有的图书馆吗?
更新
在与一位同事交谈后,有人向我介绍了AOP或面向方面编程。以下是我的理解。。。使用AOP,可以简单地修饰方法&具有某些属性的类。AOP框架然后在这些类中或围绕这些类注入代码&方法。有两种不同的框架,一种是注入代码&然后编译程序集&第二种简单地使用反射&捕获已修饰的调用,并在运行时将任何代码包装在方法周围。
我希望这一切都有意义。我会在这方面做更多的研究;张贴我的方法。
谢谢大家。。。
我不确定这是否是您想要的。但是,如果你在一个catch块中,你可以通过以下方式获得这个类的所有字段和属性:
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];
}
}
为了完整起见,我已经展示了如何获取异常发生的方法名称。
- Type.GetProperties方法
- Type.GetFields方法
- PropertyInfo.GetValue方法
- FieldInfo.GetValue方法
- StackTrace类
使用BindingFlags,您可以指定约束,例如,您只想要此类的属性,而不想要继承的属性:
在.NET反射中使用带有BindingFlags.DeclaredOnly的GetProperties()
当然,以上内容应该只为您提供一个如何手动完成的起点,并且您应该将所有内容封装到类中。我自己从来没有用过,所以它没有经过测试。
您不应该在Try-Catch表单中使用异常处理。相反,它应该是
- 页面级别错误
- 应用程序级别错误
假设您有一个表示层和一个业务逻辑层/DataAccess层。
在say Business Logic中遇到错误时,它将直接移动到Application_error Event下的Glogal.asax.cs文件,而不返回调用函数。在这里,您可以像下面这样记录错误消息。。。。
HttpContext.Current.Server.GetLastError().InnerException.StackTrace
HttpContext.Current.Server.GetLastError().InnerException.Message
HttpContext.Current.Server.GetLastError().InnerException.Source
HttpContext.Current.Server.GetLastError().InnerException.TargetSite.DeclaringType.FullName
HttpContext.Current.Server.GetLastError().InnerException.TargetSite.DeclaringType.Name
HttpContext.Current.Server.GetLastError().InnerException.TargetSite.DeclaringType.Namespace
在页面级错误的情况下,Priority是page OnError Override,最后是Application level错误事件。您也可以在这里记录错误。
我更喜欢Application_error处理程序,因为如果你有20个模块,当你需要为每个模块创建基类时,就会出现这种情况。使代码冗余是不好的。
现在,在Web配置中,您可以编写代码在如下默认页面上重定向用户。
<customErrors defaultRedirect="ErrorPage.htm" mode="On">
<error statusCode="404" redirect="ErrorPageNotFound.htm"/>
</customErrors>
这是关于Stack Overflow的一个令人恶心的问题,尽管措辞不同。在一个帖子中,答案是使用PostSharp。正如其他人建议转储堆栈跟踪一样,您可以这样做。最简单的方法是手动转储局部变量。这可以是Trace,也可以创建自己的自定义异常处理程序。