Terraria 1.4.0.5 Source Code
This commit is contained in:
commit
05205f009e
1059 changed files with 563450 additions and 0 deletions
125
Utilities/CrashDump.cs
Normal file
125
Utilities/CrashDump.cs
Normal file
|
@ -0,0 +1,125 @@
|
|||
// Decompiled with JetBrains decompiler
|
||||
// Type: Terraria.Utilities.CrashDump
|
||||
// Assembly: Terraria, Version=1.4.0.5, Culture=neutral, PublicKeyToken=null
|
||||
// MVID: 67F9E73E-0A81-4937-A22C-5515CD405A83
|
||||
// Assembly location: C:\Users\mikeyisbaeyt\Downloads\depotdownloader-2.4.5\depots\105601\6707058\Terraria.exe
|
||||
|
||||
using ReLogic.OS;
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Threading;
|
||||
|
||||
namespace Terraria.Utilities
|
||||
{
|
||||
public static class CrashDump
|
||||
{
|
||||
public static bool WriteException(CrashDump.Options options, string outputDirectory = ".") => CrashDump.Write(options, CrashDump.ExceptionInfo.Present, outputDirectory);
|
||||
|
||||
public static bool Write(CrashDump.Options options, string outputDirectory = ".") => CrashDump.Write(options, CrashDump.ExceptionInfo.None, outputDirectory);
|
||||
|
||||
private static string CreateDumpName()
|
||||
{
|
||||
DateTime localTime = DateTime.Now.ToLocalTime();
|
||||
return string.Format("{0}_{1}_{2}_{3}.dmp", (object) "Terraria", (object) Main.versionNumber, (object) localTime.ToString("MM-dd-yy_HH-mm-ss-ffff", (IFormatProvider) CultureInfo.InvariantCulture), (object) Thread.CurrentThread.ManagedThreadId);
|
||||
}
|
||||
|
||||
private static bool Write(
|
||||
CrashDump.Options options,
|
||||
CrashDump.ExceptionInfo exceptionInfo,
|
||||
string outputDirectory)
|
||||
{
|
||||
if (!Platform.IsWindows)
|
||||
return false;
|
||||
string path = Path.Combine(outputDirectory, CrashDump.CreateDumpName());
|
||||
if (!Utils.TryCreatingDirectory(outputDirectory))
|
||||
return false;
|
||||
using (FileStream fileStream = File.Create(path))
|
||||
return CrashDump.Write((SafeHandle) fileStream.SafeFileHandle, options, exceptionInfo);
|
||||
}
|
||||
|
||||
private static bool Write(
|
||||
SafeHandle fileHandle,
|
||||
CrashDump.Options options,
|
||||
CrashDump.ExceptionInfo exceptionInfo)
|
||||
{
|
||||
if (!Platform.IsWindows)
|
||||
return false;
|
||||
Process currentProcess = Process.GetCurrentProcess();
|
||||
IntPtr handle = currentProcess.Handle;
|
||||
uint 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);
|
||||
}
|
||||
|
||||
[DllImport("dbghelp.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, SetLastError = true)]
|
||||
private static extern bool MiniDumpWriteDump(
|
||||
IntPtr hProcess,
|
||||
uint processId,
|
||||
SafeHandle hFile,
|
||||
uint dumpType,
|
||||
ref CrashDump.MiniDumpExceptionInformation expParam,
|
||||
IntPtr userStreamParam,
|
||||
IntPtr callbackParam);
|
||||
|
||||
[DllImport("dbghelp.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, SetLastError = true)]
|
||||
private static extern bool MiniDumpWriteDump(
|
||||
IntPtr hProcess,
|
||||
uint processId,
|
||||
SafeHandle hFile,
|
||||
uint dumpType,
|
||||
IntPtr expParam,
|
||||
IntPtr userStreamParam,
|
||||
IntPtr callbackParam);
|
||||
|
||||
[DllImport("kernel32.dll")]
|
||||
private static extern uint GetCurrentThreadId();
|
||||
|
||||
[System.Flags]
|
||||
public enum Options : uint
|
||||
{
|
||||
Normal = 0,
|
||||
WithDataSegs = 1,
|
||||
WithFullMemory = 2,
|
||||
WithHandleData = 4,
|
||||
FilterMemory = 8,
|
||||
ScanMemory = 16, // 0x00000010
|
||||
WithUnloadedModules = 32, // 0x00000020
|
||||
WithIndirectlyReferencedMemory = 64, // 0x00000040
|
||||
FilterModulePaths = 128, // 0x00000080
|
||||
WithProcessThreadData = 256, // 0x00000100
|
||||
WithPrivateReadWriteMemory = 512, // 0x00000200
|
||||
WithoutOptionalData = 1024, // 0x00000400
|
||||
WithFullMemoryInfo = 2048, // 0x00000800
|
||||
WithThreadInfo = 4096, // 0x00001000
|
||||
WithCodeSegs = 8192, // 0x00002000
|
||||
WithoutAuxiliaryState = 16384, // 0x00004000
|
||||
WithFullAuxiliaryState = 32768, // 0x00008000
|
||||
WithPrivateWriteCopyMemory = 65536, // 0x00010000
|
||||
IgnoreInaccessibleMemory = 131072, // 0x00020000
|
||||
ValidTypeFlags = IgnoreInaccessibleMemory | WithPrivateWriteCopyMemory | WithFullAuxiliaryState | WithoutAuxiliaryState | WithCodeSegs | WithThreadInfo | WithFullMemoryInfo | WithoutOptionalData | WithPrivateReadWriteMemory | WithProcessThreadData | FilterModulePaths | WithIndirectlyReferencedMemory | WithUnloadedModules | ScanMemory | FilterMemory | WithHandleData | WithFullMemory | WithDataSegs, // 0x0003FFFF
|
||||
}
|
||||
|
||||
private enum ExceptionInfo
|
||||
{
|
||||
None,
|
||||
Present,
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential, Pack = 4)]
|
||||
private struct MiniDumpExceptionInformation
|
||||
{
|
||||
public uint ThreadId;
|
||||
public IntPtr ExceptionPointers;
|
||||
[MarshalAs(UnmanagedType.Bool)]
|
||||
public bool ClientPointers;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue