辅助类——记录错误信息
記錄錯誤信息
Debug游戲代碼可能是非常復雜的,特別是如果您沒有得到任何異常,但某些渲染循環卻出錯。只設置幾個斷點并不夠,尤其是如果游戲在運行一段時間之后遇到錯誤,Debug并不是正確的選擇。您想知道每一幀都運行了什么,但又不想逐步貫穿500幀去發現它。對于這類問題,您可以僅僅拋出一些文本到控制臺,不過這只能在Visual Studio中使用,而且當你下次啟動項目時將會丟失所有的控制臺內容。
在我做過的所有比較大型的項目中,一個最重要的類就是Log類,它只是給一個簡單的文本文件寫入消息、警告、錯誤或者Debug文本。這個類本身很簡短,也很簡單,但如果你以正確的方式使用它,將會給您的debug調試和測試會話更令人愉快。另外,還有更加高級的日志記錄類和框架(logging classes and frameworks)可利用,諸如Log4Net,你可以在http://logging.apache.org/log4net/找到。日志不僅僅只是給文本文件寫入幾行。來自于應用程序的日志數據常常用來遠程獲取用戶錯誤,借助一個WebService,你可以激活Windows錯誤事件,還可以做很多其他事情。這些不是本書能涵蓋的,因為這是一個非常復雜的話題。對于本書中的簡單游戲,使用Log類應該足夠了。
先看一看Log類(在Breakout游戲中能找到一個更復雜的版本):
public class Log {#region Variablesprivate static StreamWriter writer = null;private const string LogFilename = "Log.txt";#endregion它使用一個Log.txt文件來存儲所有消息,并使用一個靜態的StreamWriter對象,以便可以方便地在靜態方法中訪問。
#region Static constructor to create log file static Log() {// Open fileFileStream file = new FileStream(LogFilename, FileMode.OpenOrCreate,FileAccess.Write, FileShare.ReadWrite);writer = new StreamWriter(file);// Go to end of filewriter.BaseStream.Seek(0, SeekOrigin.End);// Enable auto flush (always be up to date when reading!)writer.AutoFlush = true;// Add some info about this sessionwriter.WriteLine("/// Session started at: "+StringHelper.WriteIsoDateAndTime(DateTime.Now)); } // Log() #endregion在游戲運行的時候,枚舉值FileShare.ReadWrite確保你總是可以從外部讀寫文件。除此之外,要把writer設置到文件的末尾,AutoFlush屬性能夠確保寫入新數據會被立即存儲到日志文件中,最后再添加一點兒文本指示這次會話已經開始。對于時間戳你將使用StringHelper類的一個輔助方法,你立刻就會學到這個類。
最后,這是該類的最重要的一個方法、也是您將一直調用的唯一方法:
#region Write log entry static public void Write(string message) {DateTime ct = DateTime.Now;string s = "[" + ct.Hour.ToString("00") + ":" +ct.Minute.ToString("00") + ":" +ct.Second.ToString("00") + "] " +message;writer.WriteLine(s);#if DEBUG// In debug mode write that message to the console as well!System.Console.WriteLine(s); #endif } // Write(message) #endregion首先,在消息的前面加上一個簡單的時間戳。然后消息被寫入Log.txt文件中,最后如果項目在debug模式,也把消息輸出到控制臺。現在,只是通過添加下列代碼行,當你每一次完成來自第二章的Breakout游戲的一個關卡,你就給Log.txt文件添加一個新行:
Log.Write("Level " + level + " completed.");轉載于:https://www.cnblogs.com/AlexCheng/archive/2010/07/28/2120269.html
總結
以上是生活随笔為你收集整理的辅助类——记录错误信息的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AjaxControlTookit中的A
- 下一篇: C#程序出现内存溢出错误的解决办法