当前位置:  编程技术>.net/c#/asp.net

c#在未出现异常情况下查看当前调用堆栈的方法

    来源: 互联网  发布时间:2014-08-30

    本文导语:      本文为大家介绍 c#在未出现异常情况下查看当前调用堆栈的方法,感兴趣的朋友可以参考下。     C#查看堆栈通常是在异常处理中,出现异常之后通过异常的堆栈可以很方便的得到出现这个错误的代码调用路径。这个很有...

    本文为大家介绍 c#在未出现异常情况下查看当前调用堆栈的方法,感兴趣的朋友可以参考下。

    C#查看堆栈通常是在异常处理中,出现异常之后通过异常的堆栈可以很方便的得到出现这个错误的代码调用路径。这个很有用,是否可以在没有异常出现时使用这种方法排查一些非异常错误呢?答案是肯定的。

    起因:
    论坛发帖子有几个途径,有可能是新闻系统直接导入的帖子,也有可能是抓取的帖子,还有可能是用户通过正常途径发表。但是这两天出了一个问题,有些帖子的HasImage属性不对。通过几种方法做调试都不能重现问题,没有办法,只有在程序中添加回复的地方添加日志程序来记录堆栈,从而追踪到是哪个途径发帖出现了问题。

代码:
 

代码如下:
[PostProviderExtension]
public class HasImageErrorCheckerPostExtension : IPostProviderExtension
{
    public void BindEvents(PostProviderBase postProvider)
    {
        postProvider.Added += new PostChanged(postProvider_Added);
    }
 
    void postProvider_Added(Model.PostInfo post)
    {
        try
        {
            StackFrame[] stacks = new StackTrace().GetFrames();
            if (post.Content.IndexOf("IMG") > -1 && post.HasImage == false)
            {
                StringBuilder sb = new StringBuilder();
                sb.AppendLine("问题出现");
                sb.AppendLine("stack is:");
                sb.Append(ToString(stacks));
 
                sb.Append("content=");
                sb.AppendLine(post.Content);
                    
                sb.Append("HasImage=");
                sb.AppendLine(UserPostContentProcessor.HasImage(post.Content).ToString());
 
                sb.Append("createUserID=");
                sb.AppendLine(post.CreateUserID.ToString());
                sb.AppendLine(string.Format("LoginUser={0},Level={1}",PageBase.GetLoginUser().ID,PageBase.GetLoginUser().LevelNo));
 
                TextLogWriter.NamedInstance("\log\HasImageErrorCheckerPostExtension\").Write(sb.ToString());
            }
        }
        catch (Exception ex)
        {
            TextLogWriter.NamedInstance("\log\HasImageErrorCheckerPostExtension\").Write(ex);
        }
    }
 
    private string ToString(StackFrame[] stacks)
    {
        string result = string.Empty;
        foreach (StackFrame stack in stacks)
        {
            result += string.Format("{0} {1} {2} {3}rn", stack.GetFileName(),
                stack.GetFileLineNumber(),
                stack.GetFileColumnNumber(),
                stack.GetMethod().ToString());
        }
        return result;
    }
}

    上面类HasImageErrorCheckerPostExtension继承自IPostProviderExtension并且有PostProviderExtension属性修饰,系统会自动调用它并在发帖时触发这里绑定的事件。这里的核心代码是new StackTrace().GetFrames()通过这个方法可以得到当前程序执行时的堆栈信息。在Release模式下可以得到调用的方法名,在Debug模式下可以得到具体的文件行号,列号。

    这个方法是调试中不能重现问题时的一种查找问题的选择方案。


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 从bean中调用“中文字符串数组”却出现问题。
  • 使用gdb时为什么调用list不出现代码
  • java调用shell中出现的问提
  • 存在线程的程序中调用exec将出现什么问题?
  • socket下调用write后出现:Broken pipe错误
  • 调用linux的tcgetattr函数去却出现Input/Output error
  • java.awt 和java.util都有List,想调用awt的List而出现Ambiguous class错误怎么办?
  • 使用对文件操作的lssek系统调用,出现line:33lseek: Success
  • C调用shell脚本出现问题,在线等待求教高手
  • c 调用python出现异常的原因分析
  • linux + Sybase,调用libsybcs.so出现问题
  • 重载ClassLoader的loadClass后,在JSP中调用,运行至defineClass是出现NoClassDefFoundError异常
  • 我在APPLET里调用JAVAMAIL发邮件,出现java.security.AccessControlException: access denied (java.util.PropertyPermission * read,write)的错误???
  • 在application或applet中调用javabean如果其中一个参数是一个文件名,在bean中会对这个文件的内容做修改会出现怎么样的情况.???
  • javabean调用ejb,jsp调用javabean.出现了如下问题,需要高手出现啊!
  • 向系统添加一个系统调用中出现的问题
  • 我在fedora12下用gvim 的“:!man find” 想调用系统终端,但出现这个问题。WARNING: terminal is not fully
  • 关于SHELL调用oracle存储过程出现的一个小问题
  • 为什么调用DLL总是出现no FirmClient.dll in java.librayry.path?
  • 调用驱动后出现的警告信息求解
  • C++ MultiMaps 成员 count():返回一个元素出现的次数
  • 是否有人知道linux启动时最先出现的小企鹅图标在那儿出现的?
  • C++ I/O 成员 bad():如果出现错误则返回true
  • java.net.URLConnection中getOutputStream()方法出现协议不支持输出流的错误,请问为何会出现此错误?
  • C++ I/O 成员 fail():如果出现错误则返回true
  • 如果出现某种错误或异常,就在网页里出现相关信息,比如连接超时,就显示系统正忙,该怎么做呀?
  • C++ Maps 成员 count():返回指定元素出现的次数
  • 我是root用户,却在桌面上出现加锁的文件。还有总是出现“???”的文件夹?怎么回事啊?
  • C++ I/O 成员 good():如果没有出现过错误则返回true
  • 用jdk的appletviewer xxx.html时会出现两个窗口,能否让它只出现一个窗口.
  • 博客 iis7站长之家


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3