a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C# > 正文

解析c#在未出現異常情況下查看當前調用堆棧的解決方法

2020-01-24 03:18:48
字體:
來源:轉載
供稿:網友
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("http://log//HasImageErrorCheckerPostExtension//").Write(sb.ToString());
            }
        }
        catch (Exception ex)
        { 
            TextLogWriter.NamedInstance("http://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}/r/n", stack.GetFileName(),
                stack.GetFileLineNumber(),
                stack.GetFileColumnNumber(),
                stack.GetMethod().ToString());
        }
        return result;
    }
}

上面類HasImageErrorCheckerPostExtension繼承自IPostProviderExtension并且有PostProviderExtension屬性修飾,系統會自動調用它并在發帖時觸發這里綁定的事件。這里的核心代碼是new StackTrace().GetFrames()通過這個方法可以得到當前程序執行時的堆棧信息。在Release模式下可以得到調用的方法名,在Debug模式下可以得到具體的文件行號,列號。
這個方法是調試中不能重現問題時的一種查找問題的選擇方案。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 亚洲欧美一区二区三区在线 | 一级久久久久 | 91一区二区三区 | 国产精品久久国产精品 | 蜜桃久久av | 国产成人精品免费视频大全最热 | 亚州成人 | www..99热| 日韩欧美精品在线视频 | 美女被草视频网站 | 久久国产精品亚州精品毛片 | 欧美高清国产 | 国产偷v国产偷∨精品视频 国产偷v国产偷v亚洲 | 欧美日韩一区二区三区不卡视频 | 狠狠操天天干 | 日本少妇xxxx软件 | 国产伦精品一区二区三区四区视频 | 精品久久久久久亚洲精品 | 精品91| 免费观看一级特黄欧美大片 | 欧美视频区 | 91麻豆精品国产91久久久久 | 日韩中文字 | 欧美成人久久久免费播放 | www91在线观看 | 国产免费又色又爽粗视频 | 哪里有免费的黄色网址 | 欧美日一区 | 一区二区在线免费观看 | 亚洲精品久久久一区二区三区 | 免费国产成人 | 久久品| 日本视频免费高清一本18 | 91久久国产综合久久91精品网站 | 国产精品一区91 | 暖暖视频日韩欧美在线观看 | 伊人一区| 欧美日本一区视频免费 | 精品91在线 | 在线亚洲激情 | 亚洲www|