mirror of
https://github.com/xivdev/Penumbra.git
synced 2025-12-12 10:17:22 +01:00
Fix some stuff, add versions.
This commit is contained in:
parent
c1a9c798ae
commit
7cb50030f9
6 changed files with 45 additions and 20 deletions
|
|
@ -24,6 +24,12 @@ public class CrashData
|
|||
/// <summary> The time this crash data was generated. </summary>
|
||||
public DateTimeOffset CrashTime { get; set; } = DateTimeOffset.UnixEpoch;
|
||||
|
||||
/// <summary> Penumbra's Version when this crash data was created. </summary>
|
||||
public string Version { get; set; } = string.Empty;
|
||||
|
||||
/// <summary> The Game's Version when this crash data was created. </summary>
|
||||
public string GameVersion { get; set; } = string.Empty;
|
||||
|
||||
/// <summary> The FFXIV process ID when this data was generated. </summary>
|
||||
public int ProcessId { get; set; } = 0;
|
||||
|
||||
|
|
@ -52,11 +58,11 @@ public class CrashData
|
|||
=> LastVfxFuncsInvoked.Count == 0 ? default : LastVfxFuncsInvoked[0];
|
||||
|
||||
/// <summary> A collection of the last few characters loaded before this crash data was generated. </summary>
|
||||
public List<CharacterLoadedEntry> LastCharactersLoaded { get; } = [];
|
||||
public List<CharacterLoadedEntry> LastCharactersLoaded { get; set; } = [];
|
||||
|
||||
/// <summary> A collection of the last few modded files loaded before this crash data was generated. </summary>
|
||||
public List<ModdedFileLoadedEntry> LastModdedFilesLoaded { get; } = [];
|
||||
public List<ModdedFileLoadedEntry> LastModdedFilesLoaded { get; set; } = [];
|
||||
|
||||
/// <summary> A collection of the last few vfx functions invoked before this crash data was generated. </summary>
|
||||
public List<VfxFuncInvokedEntry> LastVfxFuncsInvoked { get; } = [];
|
||||
public List<VfxFuncInvokedEntry> LastVfxFuncsInvoked { get; set; } = [];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ public sealed class GameEventLogReader : IDisposable
|
|||
}
|
||||
|
||||
|
||||
public JsonObject Dump(string mode, int processId, int exitCode)
|
||||
public JsonObject Dump(string mode, int processId, int exitCode, string version, string gameVersion)
|
||||
{
|
||||
var crashTime = DateTimeOffset.UtcNow;
|
||||
var obj = new JsonObject
|
||||
|
|
@ -34,6 +34,8 @@ public sealed class GameEventLogReader : IDisposable
|
|||
[nameof(CrashData.CrashTime)] = DateTimeOffset.UtcNow,
|
||||
[nameof(CrashData.ProcessId)] = processId,
|
||||
[nameof(CrashData.ExitCode)] = exitCode,
|
||||
[nameof(CrashData.Version)] = version,
|
||||
[nameof(CrashData.GameVersion)] = gameVersion,
|
||||
};
|
||||
|
||||
foreach (var (reader, singular, _) in Readers)
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ public class CrashHandler
|
|||
{
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
if (args.Length < 2 || !int.TryParse(args[1], out var pid))
|
||||
if (args.Length < 4 || !int.TryParse(args[1], out var pid))
|
||||
return;
|
||||
|
||||
try
|
||||
|
|
@ -17,7 +17,7 @@ public class CrashHandler
|
|||
|
||||
parent.WaitForExit();
|
||||
var exitCode = parent.ExitCode;
|
||||
var obj = reader.Dump("Crash", pid, exitCode);
|
||||
var obj = reader.Dump("Crash", pid, exitCode, args[2], args[3]);
|
||||
using var fs = File.Open(args[0], FileMode.Create);
|
||||
using var w = new Utf8JsonWriter(fs, new JsonWriterOptions { Indented = true });
|
||||
obj.WriteTo(w, new JsonSerializerOptions() { WriteIndented = true });
|
||||
|
|
|
|||
|
|
@ -22,15 +22,17 @@ public sealed class CrashHandlerService : IDisposable, IService
|
|||
private readonly ActorManager _actors;
|
||||
private readonly ResourceLoader _resourceLoader;
|
||||
private readonly Configuration _config;
|
||||
private readonly ValidityChecker _validityChecker;
|
||||
|
||||
public CrashHandlerService(FilenameService files, CommunicatorService communicator, ActorManager actors, ResourceLoader resourceLoader,
|
||||
Configuration config)
|
||||
Configuration config, ValidityChecker validityChecker)
|
||||
{
|
||||
_files = files;
|
||||
_communicator = communicator;
|
||||
_actors = actors;
|
||||
_resourceLoader = resourceLoader;
|
||||
_config = config;
|
||||
_validityChecker = validityChecker;
|
||||
|
||||
if (!_config.UseCrashHandler)
|
||||
return;
|
||||
|
|
@ -152,6 +154,8 @@ public sealed class CrashHandlerService : IDisposable, IService
|
|||
};
|
||||
info.ArgumentList.Add(_files.LogFileName);
|
||||
info.ArgumentList.Add(Environment.ProcessId.ToString());
|
||||
info.ArgumentList.Add($"{_validityChecker.Version} ({_validityChecker.CommitHash})");
|
||||
info.ArgumentList.Add(_validityChecker.GameVersion);
|
||||
_child = Process.Start(info);
|
||||
if (_child == null)
|
||||
throw new Exception("Child Process could not be created.");
|
||||
|
|
@ -177,7 +181,7 @@ public sealed class CrashHandlerService : IDisposable, IService
|
|||
JsonObject jObj;
|
||||
lock (_eventWriter)
|
||||
{
|
||||
jObj = reader.Dump("Manual Dump", Environment.ProcessId, 0);
|
||||
jObj = reader.Dump("Manual Dump", Environment.ProcessId, 0, $"{_validityChecker.Version} ({_validityChecker.CommitHash})", _validityChecker.GameVersion);
|
||||
}
|
||||
|
||||
var logFile = _files.LogFileName;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
using Dalamud.Interface.Internal.Notifications;
|
||||
using Dalamud.Plugin;
|
||||
using FFXIVClientStructs.FFXIV.Client.System.Framework;
|
||||
using OtterGui.Classes;
|
||||
using OtterGui.Services;
|
||||
|
||||
|
|
@ -20,6 +21,7 @@ public class ValidityChecker : IService
|
|||
|
||||
public readonly string Version;
|
||||
public readonly string CommitHash;
|
||||
public readonly string GameVersion;
|
||||
|
||||
public ValidityChecker(DalamudPluginInterface pi)
|
||||
{
|
||||
|
|
@ -30,12 +32,17 @@ public class ValidityChecker : IService
|
|||
var assembly = GetType().Assembly;
|
||||
Version = assembly.GetName().Version?.ToString() ?? string.Empty;
|
||||
CommitHash = assembly.GetCustomAttribute<AssemblyInformationalVersionAttribute>()?.InformationalVersion ?? "Unknown";
|
||||
GameVersion = GetGameVersion();
|
||||
}
|
||||
|
||||
private static unsafe string GetGameVersion()
|
||||
=> Framework.Instance()->GameVersion[0];
|
||||
|
||||
public void LogExceptions()
|
||||
{
|
||||
if (ImcExceptions.Count > 0)
|
||||
Penumbra.Messager.NotificationMessage($"{ImcExceptions} IMC Exceptions thrown during Penumbra load. Please repair your game files.", NotificationType.Warning);
|
||||
Penumbra.Messager.NotificationMessage($"{ImcExceptions} IMC Exceptions thrown during Penumbra load. Please repair your game files.",
|
||||
NotificationType.Warning);
|
||||
}
|
||||
|
||||
// Because remnants of penumbra in devPlugins cause issues, we check for them to warn users to remove them.
|
||||
|
|
|
|||
|
|
@ -13,6 +13,9 @@ public static class CrashDataExtensions
|
|||
{
|
||||
ImGui.TextUnformatted(nameof(data.Mode));
|
||||
ImGui.TextUnformatted(nameof(data.CrashTime));
|
||||
ImGui.TextUnformatted("Current Age");
|
||||
ImGui.TextUnformatted(nameof(data.Version));
|
||||
ImGui.TextUnformatted(nameof(data.GameVersion));
|
||||
ImGui.TextUnformatted(nameof(data.ExitCode));
|
||||
ImGui.TextUnformatted(nameof(data.ProcessId));
|
||||
ImGui.TextUnformatted(nameof(data.TotalModdedFilesLoaded));
|
||||
|
|
@ -25,6 +28,9 @@ public static class CrashDataExtensions
|
|||
{
|
||||
ImGui.TextUnformatted(data.Mode);
|
||||
ImGui.TextUnformatted(data.CrashTime.ToString());
|
||||
ImGui.TextUnformatted((DateTimeOffset.UtcNow - data.CrashTime).ToString(@"dd\.hh\:mm\:ss"));
|
||||
ImGui.TextUnformatted(data.Version);
|
||||
ImGui.TextUnformatted(data.GameVersion);
|
||||
ImGui.TextUnformatted(data.ExitCode.ToString());
|
||||
ImGui.TextUnformatted(data.ProcessId.ToString());
|
||||
ImGui.TextUnformatted(data.TotalModdedFilesLoaded.ToString());
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue