// 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); }
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")); }); }
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)); }
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)); }
// 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); }
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); }
// 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)); }
public static void EnableCrashDumps(CrashDump.Options options) { DumpOnCrash = true; CrashDumpOptions = options; }