示例#1
0
 /**
  * ParseReportFile - extracts a ReportFileData from a crash dump file
  *
  * @param filename - the crash dump
  * @param reportData - the container to fill
  *
  * @return bool - true if successful
  */
 public bool ParseReportFile(string filename, ReportFileData reportData, OutputLogFile logFile)
 {
     logFile.WriteLine("");
     logFile.WriteLine("Parsing report dump " + filename);
     logFile.WriteLine("\n\n");
     MemoryStream ms = new MemoryStream();
     try
     {
         using (BinaryReader binaryReader = new BinaryReader((Stream) File.OpenRead(filename)))
         {
             while (true)
             {
                 byte[] buffer = binaryReader.ReadBytes(4096);
                 if (buffer != null && buffer.Length != 0)
                     ms.Write(buffer, 0, buffer.Length);
                 else
                     break;
             }
         }
     }
     catch (Exception ex)
     {
         logFile.WriteLine(ex.Message);
         logFile.WriteLine("Failed to read report dump!");
         return false;
     }
     ms.Seek(0L, SeekOrigin.Begin);
     string nextString = this.GetNextString(ms, logFile);
     logFile.WriteLine("Version = " + nextString);
     if (nextString.Equals(ReportFile.currentDumpVersion))
     {
         logFile.WriteLine("Dump is current version: " + ReportFile.currentDumpVersion);
         reportData.Version = int.Parse(nextString);
         reportData.ComputerName = this.GetNextString(ms, logFile);
         reportData.UserName = this.GetNextString(ms, logFile);
         reportData.GameName = this.GetNextString(ms, logFile);
         reportData.PlatformName = this.GetNextString(ms, logFile);
         reportData.LanguageExt = this.GetNextString(ms, logFile);
         reportData.TimeOfCrash = this.GetNextString(ms, logFile);
         reportData.BuildVer = this.GetNextString(ms, logFile);
         reportData.ChangelistVer = this.GetNextString(ms, logFile);
         reportData.CommandLine = this.GetNextString(ms, logFile);
         reportData.BaseDir = this.GetNextString(ms, logFile);
         reportData.CallStack = this.GetNextString(ms, logFile);
         reportData.EngineMode = this.GetNextString(ms, logFile);
     }
     else if (nextString.Equals("2"))
     {
         logFile.WriteLine("Dump is old but supported. DumpVer=" + nextString + " CurVer=" + ReportFile.currentDumpVersion);
         reportData.Version = int.Parse(nextString);
         reportData.ComputerName = this.GetNextString(ms, logFile);
         reportData.UserName = this.GetNextString(ms, logFile);
         reportData.GameName = this.GetNextString(ms, logFile);
         reportData.LanguageExt = this.GetNextString(ms, logFile);
         reportData.TimeOfCrash = this.GetNextString(ms, logFile);
         reportData.BuildVer = this.GetNextString(ms, logFile);
         reportData.ChangelistVer = this.GetNextString(ms, logFile);
         reportData.CommandLine = this.GetNextString(ms, logFile);
         reportData.BaseDir = this.GetNextString(ms, logFile);
         reportData.CallStack = this.GetNextString(ms, logFile);
         reportData.EngineMode = this.GetNextString(ms, logFile);
     }
     else
     {
         logFile.WriteLine("Outdated dump version " + nextString + "! Current Version is " + ReportFile.currentDumpVersion);
         return false;
     }
     logFile.WriteLine("\n\n");
     return reportData.IsValid(logFile);
 }
示例#2
0
        /**
         * ParseReportFile - extracts a ReportFileData from a crash dump file
         *
         * @param filename - the crash dump
         * @param reportData - the container to fill
         *
         * @return bool - true if successful
         */
        public bool ParseReportFile(string filename, ReportFileData reportData, OutputLogFile logFile)
        {
            logFile.WriteLine("");
            logFile.WriteLine("Parsing report dump " + filename);
            logFile.WriteLine("\n\n");
            MemoryStream ms = new MemoryStream();

            try
            {
                using (BinaryReader binaryReader = new BinaryReader((Stream)File.OpenRead(filename)))
                {
                    while (true)
                    {
                        byte[] buffer = binaryReader.ReadBytes(4096);
                        if (buffer != null && buffer.Length != 0)
                        {
                            ms.Write(buffer, 0, buffer.Length);
                        }
                        else
                        {
                            break;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                logFile.WriteLine(ex.Message);
                logFile.WriteLine("Failed to read report dump!");
                return(false);
            }
            ms.Seek(0L, SeekOrigin.Begin);
            string nextString = this.GetNextString(ms, logFile);

            logFile.WriteLine("Version = " + nextString);
            if (nextString.Equals(ReportFile.currentDumpVersion))
            {
                logFile.WriteLine("Dump is current version: " + ReportFile.currentDumpVersion);
                reportData.Version       = int.Parse(nextString);
                reportData.ComputerName  = this.GetNextString(ms, logFile);
                reportData.UserName      = this.GetNextString(ms, logFile);
                reportData.GameName      = this.GetNextString(ms, logFile);
                reportData.PlatformName  = this.GetNextString(ms, logFile);
                reportData.LanguageExt   = this.GetNextString(ms, logFile);
                reportData.TimeOfCrash   = this.GetNextString(ms, logFile);
                reportData.BuildVer      = this.GetNextString(ms, logFile);
                reportData.ChangelistVer = this.GetNextString(ms, logFile);
                reportData.CommandLine   = this.GetNextString(ms, logFile);
                reportData.BaseDir       = this.GetNextString(ms, logFile);
                reportData.CallStack     = this.GetNextString(ms, logFile);
                reportData.EngineMode    = this.GetNextString(ms, logFile);
            }
            else if (nextString.Equals("2"))
            {
                logFile.WriteLine("Dump is old but supported. DumpVer=" + nextString + " CurVer=" + ReportFile.currentDumpVersion);
                reportData.Version       = int.Parse(nextString);
                reportData.ComputerName  = this.GetNextString(ms, logFile);
                reportData.UserName      = this.GetNextString(ms, logFile);
                reportData.GameName      = this.GetNextString(ms, logFile);
                reportData.LanguageExt   = this.GetNextString(ms, logFile);
                reportData.TimeOfCrash   = this.GetNextString(ms, logFile);
                reportData.BuildVer      = this.GetNextString(ms, logFile);
                reportData.ChangelistVer = this.GetNextString(ms, logFile);
                reportData.CommandLine   = this.GetNextString(ms, logFile);
                reportData.BaseDir       = this.GetNextString(ms, logFile);
                reportData.CallStack     = this.GetNextString(ms, logFile);
                reportData.EngineMode    = this.GetNextString(ms, logFile);
            }
            else
            {
                logFile.WriteLine("Outdated dump version " + nextString + "! Current Version is " + ReportFile.currentDumpVersion);
                return(false);
            }
            logFile.WriteLine("\n\n");
            return(reportData.IsValid(logFile));
        }