惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Help Net Security
Help Net Security
G
Google Developers Blog
雷峰网
雷峰网
WordPress大学
WordPress大学
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Engineering at Meta
Engineering at Meta
Security Latest
Security Latest
T
Threat Research - Cisco Blogs
AWS News Blog
AWS News Blog
F
Full Disclosure
C
Cybersecurity and Infrastructure Security Agency CISA
T
The Exploit Database - CXSecurity.com
J
Java Code Geeks
U
Unit 42
C
Cyber Attacks, Cyber Crime and Cyber Security
V
V2EX
C
Cisco Blogs
博客园 - 司徒正美
Project Zero
Project Zero
L
LINUX DO - 热门话题
阮一峰的网络日志
阮一峰的网络日志
Blog — PlanetScale
Blog — PlanetScale
Scott Helme
Scott Helme
A
About on SuperTechFans
Hugging Face - Blog
Hugging Face - Blog
S
Securelist
小众软件
小众软件
aimingoo的专栏
aimingoo的专栏
S
Schneier on Security
G
GRAHAM CLULEY
酷 壳 – CoolShell
酷 壳 – CoolShell
Cyberwarzone
Cyberwarzone
MongoDB | Blog
MongoDB | Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 叶小钗
T
Threatpost
Recorded Future
Recorded Future
C
CXSECURITY Database RSS Feed - CXSecurity.com
宝玉的分享
宝玉的分享
N
News and Events Feed by Topic
人人都是产品经理
人人都是产品经理
The Register - Security
The Register - Security
S
Security Archives - TechRepublic
博客园 - Franky
N
News | PayPal Newsroom
Simon Willison's Weblog
Simon Willison's Weblog
S
SegmentFault 最新的问题
W
WeLiveSecurity
A
Arctic Wolf
B
Blog

博客园 - JulioZou

读书:《Joel软件随想录》——“囚徒的困境”! 《XNA高级编程:Xbox 360和Windows》5-1 《XNA高级编程:Xbox 360和Windows》4-7 《XNA高级编程:Xbox 360和Windows》4-6 《XNA高级编程:Xbox 360和Windows》4-5 《XNA高级编程:Xbox 360和Windows》4-4 《XNA高级编程:Xbox 360和Windows》4-3 《XNA高级编程:Xbox 360和Windows》4-2 《XNA高级编程:Xbox 360和Windows》4-1 《XNA高级编程:Xbox 360和Windows》3-10 《XNA高级编程:Xbox 360和Windows》3-9 《XNA高级编程:Xbox 360和Windows》3-8 《XNA高级编程:Xbox 360和Windows》3-7 《XNA高级编程:Xbox 360和Windows》3-6 《XNA高级编程:Xbox 360和Windows》3-5 《XNA高级编程:Xbox 360和Windows》3-4 《XNA高级编程:Xbox 360和Windows》3-2 《XNA高级编程:Xbox 360和Windows》3-1 《XNA高级编程:Xbox 360和Windows》2-6/2-7
《XNA高级编程:Xbox 360和Windows》3-3
JulioZou · 2009-01-28 · via 博客园 - JulioZou

3.3记录错误信息

     调试代码非常复杂,特别是渲染循环出错了,但您却得不到任何异常。只设置几个调试断点并不够,尤其是当游戏运行一段时间之后出现了错误,调试并不是合适的选择。您或许想知道每一帧都发生了什么,但又不想一步步地跟踪它。对于这类问题,您可以给控制台输出一些信息,不过这只能在Visual Studio中使用,而且当下次启动项目时这些信息就没了。     在我做过的比较大型的项目中,有一个类非常重要,那就是Log类,它用来往一个文本文件中记录消息、警告、错误或者调试信息。这个类本身很简短,也很简单,但如果正确地使用它,会给您的调试和测试带来很大的乐趣。另外还有其他很多更加高级的日志记录类和框架(logging classes and frameworks)可以用,比如Log4Net,可以在这里得到:http://logging.apache.org/log4net 。日志并非仅仅记录几行信息那么简单,您可以使用一个WebService来远程获取用户使用您的应用程序时的日志信息,可以激活Windows错误事件,还可以做很多其他事情。本书并没有过多地讨论,因为这是一个很复杂的话题。对于本书中的简单游戏,使用Log类就足够了。     先看一看Log类的实现(在Breakout游戏中有一个更复杂的版本):

public class Log
{
    
#region Variables
    
private static StreamWriter writer = null;
    
private const string LogFilename = "Log.txt";
    
#endregion


它使用一个
Log.txt文件来存储所有消息,并使用一个静态的StreamWriter对象,以便可以方便地在静态方法中访问。当这个类第一次被调用的时候,就会通过其静态构造器被初始化:

#region Static constructor to create log file
static Log()
{
    
// Open file
    FileStream file = new FileStream(
              LogFilename, FileMode.OpenOrCreate,
              FileAccess.Write, FileShare.ReadWrite);
    writer 
= new StreamWriter(file);
    
// Go to end of file
    writer.BaseStream.Seek(0, SeekOrigin.End);
    
// Enable auto flush (always be up to date when reading!)
    writer.AutoFlush = true;
    
// Add some info about this session
    writer.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文件中,最后如果在调试项目,把消息输出到控制台。现在,您可以为Breakout游戏添加日志功能,每当您升级的时候在Log.txt文件的最后添加一行升级消息,如下所示:

Log.Write("Level " + level + " completed.");