国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

利用Trace.WriteLine定位難以重現的問題

2019-11-17 02:23:49
字體:
來源:轉載
供稿:網友

利用Trace.WriteLine定位難以重現的問題

最近的一個項目中,在客戶測試環境(UAT)發現了一個bug,卻反復嘗試都無法在開發環境和QA環境來重現。界面上也沒有出現任何異常和錯誤,只是某個數據的顯示錯誤,其他數據都正常。仔細分析和調試了出錯位置的上下文代碼,沒有任何異常和疑點。由于是C/S結構(WPF),而技術人員也無法到達客戶現場進行協助,所以半天都沒有任何進展。

后來突然想到了用Trace.WriteLine輸出日志的方法,在征得領導同意和取得客戶的協助意愿之后,按下面的步驟來實施,最終根據日志分析找到了問題原因:

  1. 在出現bug的相關上下文代碼中加入Trace.WriteLine方法,記錄下可疑的數據和狀態;
  2. 新建一個單獨的dll工程,里面要求實現接口TraceListener,重寫WriteLine(或者Write)方法;
  3. 將生成的dll拷貝到系統啟動目錄下(與啟動exe文件平級);
  4. 修改系統配置文件(app.config),將輸出節點配置為剛才dll中的TraceListener實現類;
  5. 重新制作安裝包分發給客戶(或者讓程序自動更新);
  6. 讓客戶重新運行新版本程序,并重現一次bug;
  7. 讓客戶把指定位置下的日志文件發送過來進行分析。

配置文件相關節點如下:

<system.diagnostics>    <trace>      <listeners>        <add name="SimpleLogTraceListener" type="TraceListenerApp.SimpleTraceListener, TraceListenerApp"/>      </listeners>    </trace>  </system.diagnostics>

輸出日志的實現類代碼如下:

    /// <summary>    /// A simple implementation for TraceListener to log the output to text file    /// </summary>    public class SimpleTraceListener : TraceListener    {        //default trace log file path        string filepath = @"c:/temp/tracelog.txt";        /// <summary>        /// override the output from Trace.Write()        /// </summary>        /// <param name="message"></param>        public override void Write(string message)        {            CheckLogFile();            //format the message with datetime            StringBuilder sb = new StringBuilder();            sb.Append("[");            sb.Append(DateTime.Now.ToString());            sb.Append("]/t");            sb.Append(message);            using (StreamWriter sw = new StreamWriter(filepath, true))            {                sw.Write(sb.ToString());                sw.Flush();            }        }        /// <summary>        /// override the output from Trace.WriteLine()        /// </summary>        /// <param name="message"></param>        public override void WriteLine(string message)        {            CheckLogFile();            //format the message with datetime            StringBuilder sb = new StringBuilder();            sb.Append("[");            sb.Append(DateTime.Now.ToString());            sb.Append("]/t");            sb.Append(message);            using (StreamWriter sw = new StreamWriter(filepath, true))            {                sw.WriteLine(sb.ToString());                sw.Flush();            }        }        //make sure the logfile is existing, if not, create a new one.        void CheckLogFile()        {            if (!File.Exists(filepath))            {                try                {                    FileStream fs = File.Create(filepath);                    fs.Close();                }                catch (Exception ex)                {                    throw ex;                }            }        }    }

(完)


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 夏邑县| 宜川县| 浮梁县| 鹤峰县| 岳西县| 黄平县| 杭锦旗| 罗源县| 安新县| 新丰县| 鄂托克前旗| 凌源市| 巴里| 靖远县| 聂拉木县| 桐梓县| 上饶市| 古交市| 剑河县| 宽甸| 驻马店市| 秦安县| 沾益县| 浑源县| 镇沅| 凉城县| 慈溪市| 静安区| 乌拉特中旗| 芦山县| 丰原市| 包头市| 扶风县| 渭南市| 忻州市| 辰溪县| 高唐县| 深泽县| 新田县| 贵港市| 慈利县|