示例#1
0
        // Token: 0x06000977 RID: 2423 RVA: 0x003B60B8 File Offset: 0x003B42B8
        private static bool Write(SafeHandle fileHandle, CrashDump.Options options, CrashDump.ExceptionInfo exceptionInfo)
        {
            if (!Platform.IsWindows)
            {
                return(false);
            }
            Process expr_0E = Process.GetCurrentProcess();
            IntPtr  handle  = expr_0E.Handle;
            uint    id      = (uint)expr_0E.Id;

            CrashDump.MiniDumpExceptionInformation miniDumpExceptionInformation;
            miniDumpExceptionInformation.ThreadId          = CrashDump.GetCurrentThreadId();
            miniDumpExceptionInformation.ClientPointers    = false;
            miniDumpExceptionInformation.ExceptionPointers = IntPtr.Zero;
            if (exceptionInfo == CrashDump.ExceptionInfo.Present)
            {
                miniDumpExceptionInformation.ExceptionPointers = Marshal.GetExceptionPointers();
            }
            bool result;

            if (miniDumpExceptionInformation.ExceptionPointers == IntPtr.Zero)
            {
                result = CrashDump.MiniDumpWriteDump(handle, id, fileHandle, (uint)options, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero);
            }
            else
            {
                result = CrashDump.MiniDumpWriteDump(handle, id, fileHandle, (uint)options, ref miniDumpExceptionInformation, IntPtr.Zero, IntPtr.Zero);
            }
            return(result);
        }
示例#2
0
        private static void HookAllExceptions()
        {
            bool useMiniDumps = Program.LaunchParameters.ContainsKey("-minidump");
            bool useFullDumps = Program.LaunchParameters.ContainsKey("-fulldump");

            Console.WriteLine("Error Logging Enabled.");
            CrashDump.Options dumpOptions = CrashDump.Options.WithFullMemory;
            if (useFullDumps)
            {
                Console.WriteLine("Full Dump logs enabled.");
            }
            AppDomain.CurrentDomain.FirstChanceException += (EventHandler <FirstChanceExceptionEventArgs>)((sender, exceptionArgs) =>
            {
                Console.Write("================\r\n" + string.Format("{0}: First-Chance Exception\r\nCulture: {1}\r\nException: {2}\r\n", (object)DateTime.Now, (object)Thread.CurrentThread.CurrentCulture.Name, (object)exceptionArgs.Exception.ToString()) + "================\r\n\r\n");
                if (!useMiniDumps)
                {
                    return;
                }
                CrashDump.WriteException(CrashDump.Options.WithIndirectlyReferencedMemory, Path.Combine(Main.SavePath, "Dumps"));
            });
            AppDomain.CurrentDomain.UnhandledException += (UnhandledExceptionEventHandler)((sender, exceptionArgs) =>
            {
                Console.Write("================\r\n" + string.Format("{0}: Unhandled Exception\r\nCulture: {1}\r\nException: {2}\r\n", (object)DateTime.Now, (object)Thread.CurrentThread.CurrentCulture.Name, (object)exceptionArgs.ExceptionObject.ToString()) + "================\r\n");
                if (!useFullDumps)
                {
                    return;
                }
                CrashDump.WriteException(dumpOptions, Path.Combine(Main.SavePath, "Dumps"));
            });
        }
示例#3
0
        private static bool Write(SafeHandle fileHandle, CrashDump.Options options,
                                  CrashDump.ExceptionInfo exceptionInfo)
        {
            if (!Platform.IsWindows)
            {
                return(false);
            }
            var currentProcess = Process.GetCurrentProcess();
            var handle         = currentProcess.Handle;
            var id             = (uint)currentProcess.Id;

            CrashDump.MiniDumpExceptionInformation expParam;
            expParam.ThreadId          = CrashDump.GetCurrentThreadId();
            expParam.ClientPointers    = false;
            expParam.ExceptionPointers = IntPtr.Zero;
            if (exceptionInfo == CrashDump.ExceptionInfo.Present)
            {
                expParam.ExceptionPointers = Marshal.GetExceptionPointers();
            }
            return(!(expParam.ExceptionPointers == IntPtr.Zero)
                ? CrashDump.MiniDumpWriteDump(handle, id, fileHandle, (uint)options, ref expParam, IntPtr.Zero,
                                              IntPtr.Zero)
                : CrashDump.MiniDumpWriteDump(handle, id, fileHandle, (uint)options, IntPtr.Zero, IntPtr.Zero,
                                              IntPtr.Zero));
        }
示例#4
0
        private static bool Write(CrashDump.Options options, CrashDump.ExceptionInfo exceptionInfo, string outputDirectory)
        {
            if (!Platform.get_IsWindows())
            {
                return(false);
            }
            string path = Path.Combine(outputDirectory, CrashDump.CreateDumpName());

            if (!Directory.Exists(outputDirectory))
            {
                Directory.CreateDirectory(outputDirectory);
            }
            using (FileStream fileStream = File.Create(path))
                return(CrashDump.Write((SafeHandle)fileStream.SafeFileHandle, options, exceptionInfo));
        }
示例#5
0
        // Token: 0x06000976 RID: 2422 RVA: 0x003B6054 File Offset: 0x003B4254
        private static bool Write(CrashDump.Options options, CrashDump.ExceptionInfo exceptionInfo, string outputDirectory)
        {
            if (!Platform.IsWindows)
            {
                return(false);
            }
            string arg_23_0 = Path.Combine(outputDirectory, CrashDump.CreateDumpName());

            if (!Directory.Exists(outputDirectory))
            {
                Directory.CreateDirectory(outputDirectory);
            }
            bool result;

            using (FileStream fileStream = File.Create(arg_23_0))
            {
                result = CrashDump.Write(fileStream.SafeFileHandle, options, exceptionInfo);
            }
            return(result);
        }
示例#6
0
        private static void SetupLogging()
        {
            if (LaunchParameters.ContainsKey("-logfile"))
            {
                string text = LaunchParameters["-logfile"];
                text = ((text != null && !(text.Trim() == "")) ? Path.Combine(text, $"Log_{DateTime.Now:yyyyMMddHHmmssfff}.log") : Path.Combine(Main.SavePath, "Logs", $"Log_{DateTime.Now:yyyyMMddHHmmssfff}.log"));
                ConsoleOutputMirror.ToFile(text);
            }
            CrashWatcher.Inititialize();
            CrashWatcher.DumpOnException  = LaunchParameters.ContainsKey("-minidump");
            CrashWatcher.LogAllExceptions = LaunchParameters.ContainsKey("-logerrors");
            bool num = LaunchParameters.ContainsKey("-fulldump");

            CrashDump.Options options = CrashDump.Options.WithFullMemory;
            if (num)
            {
                Console.WriteLine("Full Dump logs enabled.");
            }
            CrashWatcher.EnableCrashDumps(options);
        }
示例#7
0
 // Token: 0x06000974 RID: 2420 RVA: 0x003B5FE3 File Offset: 0x003B41E3
 public static bool Write(CrashDump.Options options, string outputDirectory = ".")
 {
     return(CrashDump.Write(options, CrashDump.ExceptionInfo.None, outputDirectory));
 }
示例#8
0
 public static void EnableCrashDumps(CrashDump.Options options)
 {
     DumpOnCrash      = true;
     CrashDumpOptions = options;
 }