欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

解析c#在未出現(xiàn)異常情況下查看當(dāng)前調(diào)用堆棧的解決方法

 更新時間:2013年05月18日 11:49:02   作者:  
本篇文章是對c#在未出現(xiàn)異常情況下查看當(dāng)前調(diào)用堆棧的解決方法進行了詳細的分析介紹,需要的朋友參考下
C#查看堆棧通常是在異常處理中,出現(xiàn)異常之后通過異常的堆??梢院芊奖愕牡玫匠霈F(xiàn)這個錯誤的代碼調(diào)用路徑。這個很有用,是否可以在沒有異常出現(xiàn)時使用這種方法排查一些非異常錯誤呢?答案是肯定的。
起因:
論壇發(fā)帖子有幾個途徑,有可能是新聞系統(tǒng)直接導(dǎo)入的帖子,也有可能是抓取的帖子,還有可能是用戶通過正常途徑發(fā)表。但是這兩天出了一個問題,有些帖子的HasImage屬性不對。通過幾種方法做調(diào)試都不能重現(xiàn)問題,沒有辦法,只有在程序中添加回復(fù)的地方添加日志程序來記錄堆棧,從而追蹤到是哪個途徑發(fā)帖出現(xiàn)了問題。
代碼:
復(fù)制代碼 代碼如下:

[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("問題出現(xiàn)");
                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}\r\n", stack.GetFileName(),
                stack.GetFileLineNumber(),
                stack.GetFileColumnNumber(),
                stack.GetMethod().ToString());
        }
        return result;
    }
}

上面類HasImageErrorCheckerPostExtension繼承自IPostProviderExtension并且有PostProviderExtension屬性修飾,系統(tǒng)會自動調(diào)用它并在發(fā)帖時觸發(fā)這里綁定的事件。這里的核心代碼是new StackTrace().GetFrames()通過這個方法可以得到當(dāng)前程序執(zhí)行時的堆棧信息。在Release模式下可以得到調(diào)用的方法名,在Debug模式下可以得到具體的文件行號,列號。
這個方法是調(diào)試中不能重現(xiàn)問題時的一種查找問題的選擇方案。

相關(guān)文章

  • C#編寫Windows服務(wù)程序詳細步驟詳解(圖文)

    C#編寫Windows服務(wù)程序詳細步驟詳解(圖文)

    本文介紹了如何用C#創(chuàng)建、安裝、啟動、監(jiān)控、卸載簡單的Windows Service 的內(nèi)容步驟和注意事項,需要的朋友可以參考下
    2017-09-09
  • Unity平臺模擬自動擋駕駛汽車

    Unity平臺模擬自動擋駕駛汽車

    這篇文章主要為大家詳細介紹了Unity平臺模擬自動擋駕駛汽車,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • C# DES加密算法中向量的作用詳細解析

    C# DES加密算法中向量的作用詳細解析

    以下是對C#中DES加密算法中向量的作用進行了詳細的介紹,需要的朋友可以過來參考下
    2013-09-09
  • 詳細聊聊C#的并發(fā)機制優(yōu)秀在哪

    詳細聊聊C#的并發(fā)機制優(yōu)秀在哪

    并發(fā)其實是一個很泛的概念,字面意思就是"同時做多件事",不過方式有所不同,下面這篇文章主要給大家介紹了關(guān)于C#并發(fā)機制的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-02-02
  • Unity shader實現(xiàn)百葉窗特效

    Unity shader實現(xiàn)百葉窗特效

    這篇文章主要為大家詳細介紹了Unity shader實現(xiàn)百葉窗特效,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • Unity實現(xiàn)圖片生成灰白圖的方法

    Unity實現(xiàn)圖片生成灰白圖的方法

    這篇文章主要為大家詳細介紹了Unity實現(xiàn)圖片生成灰白圖,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • 詳解c# Emit技術(shù)

    詳解c# Emit技術(shù)

    這篇文章主要介紹了c# Emit技術(shù)的相關(guān)資料,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2020-12-12
  • 解析C#中的ref和out參數(shù)

    解析C#中的ref和out參數(shù)

    本文將通過實例和說明,給大家詳細講解C#中的ref和out參數(shù)
    2013-11-11
  • C#圖像處理之浮雕效果實現(xiàn)方法

    C#圖像處理之浮雕效果實現(xiàn)方法

    這篇文章主要介紹了C#圖像處理之浮雕效果實現(xiàn)方法,可實現(xiàn)圖片轉(zhuǎn)換成浮雕效果的功能,需要的朋友可以參考下
    2015-04-04
  • Unity實現(xiàn)簡單虛擬搖桿

    Unity實現(xiàn)簡單虛擬搖桿

    這篇文章主要為大家詳細介紹了Unity實現(xiàn)簡單虛擬搖桿,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04

最新評論