国产探花免费观看_亚洲丰满少妇自慰呻吟_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;                }            }        }    }

(完)


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 尖扎县| 寿光市| 法库县| 松江区| 新竹市| 论坛| 介休市| 北流市| 扎兰屯市| 三亚市| 新昌县| 辰溪县| 天祝| 遵化市| 锦州市| 徐水县| 固安县| 揭西县| 高淳县| 贡觉县| 普格县| 昌乐县| 丹凤县| 婺源县| 馆陶县| 云阳县| 民勤县| 临沭县| 郧西县| 吴旗县| 远安县| 巫山县| 越西县| 沾化县| 罗定市| 文水县| 自治县| 渭南市| 高唐县| 广昌县| 高唐县|