从DNN中拔出的,效果不赖。。。获取程序运行时候异常的调用堆栈位置
/// <summary>
/// 获取调用的堆栈信息 获取当前程序运行的堆栈的副本集合
/// </summary>
private static StackFrame CallingFrame
{
get
{
StackFrame frame = null;
///返回当前堆栈跟踪中所有堆栈帧的副本。
var stack = new StackTrace().GetFrames();
int frameDepth = 0;
if (stack != null)
{
///穷历 直到找到要调用日志或者异常的时候 的前一个方法 就查询到了 出错的执行方法的位置
var reflectedType = stack[frameDepth].GetMethod().ReflectedType;
while (reflectedType == BuildManager.GetType("DotNetNuke.Services.Exceptions.Exceptions", false)
|| reflectedType == typeof(DnnLogger)
|| reflectedType == typeof(DnnLog))
{
//排除这些类 找到指定的调用的类 Type
frameDepth++;
reflectedType = stack[frameDepth].GetMethod().ReflectedType;
}
frame = stack[frameDepth];
}
return frame;
}
}