From fcddc8a301a49da879a3d6ecfc0d1e1fca34a15d Mon Sep 17 00:00:00 2001 From: Vitalii Mikhailov Date: Sun, 13 Oct 2024 19:56:26 +0300 Subject: [PATCH 01/62] Progress --- .../BUTR.CrashReport.Bannerlord.Parser.csproj | 61 -- .../CrashReportParser.cs | 544 ------------------ .../Extensions/IEnumerableExtensions.cs | 10 - .../Extensions/StringExtensions.cs | 10 - .../BUTR.CrashReport.Bannerlord.Source.csproj | 1 + .../CrashReportCreatorHelper.cs | 24 +- .../CrashReportShared.cs | 93 +-- .../HarmonyProvider.cs | 197 +++++-- .../MonoModProvider.cs | 91 +++ .../MonoModUtils.cs | 252 ++++++++ .../BepInExIntegration.cs | 8 +- .../BepInExIntegration.cs | 8 +- .../AssemblyArchitectureType.cs | 37 ++ src/BUTR.CrashReport.Models/AssemblyModel.cs | 2 +- .../{AssemblyModelType.cs => AssemblyType.cs} | 2 +- ...uleOrPluginModel.cs => CapabilityModel.cs} | 8 +- .../CrashReportModel.cs | 21 +- .../DependencyMetadataModel.cs | 2 +- ...ModelType.cs => DependencyMetadataType.cs} | 2 +- .../EnhancedStacktraceFrameModel.cs | 13 +- .../HarmonyPatchModel.cs | 10 +- .../HarmonyPatchType.cs | 6 +- .../HarmonyPatchesModel.cs | 6 +- .../LoaderPluginModel.cs | 4 +- .../{LogEntry.cs => LogEntryModel.cs} | 4 +- .../{LogSource.cs => LogSourceModel.cs} | 6 +- src/BUTR.CrashReport.Models/MetadataModel.cs | 13 +- ...odExecuting.cs => MethodExecutingModel.cs} | 4 +- .../{MethodSimple.cs => MethodSimpleModel.cs} | 4 +- src/BUTR.CrashReport.Models/ModuleModel.cs | 4 +- ...ModDetourModel.cs => MonoModPatchModel.cs} | 42 +- ...rModelType.cs => MonoModPatchModelType.cs} | 2 +- ...DetoursModel.cs => MonoModPatchesModel.cs} | 4 +- .../NativeAssemblyArchitectureType.cs | 35 -- .../RuntimePatchModel.cs | 35 ++ .../RuntimePatchesModel.cs | 27 + ...oModuleOrLoaderPlugin.cs => UpdateInfo.cs} | 4 +- .../CrashReportHtml.Html.cs | 2 +- .../CrashReportHtml.cs | 43 +- .../CrashReportImGui.cs | 11 +- .../Extensions/AssemblyModelTypeExtensions.cs | 2 +- .../ICrashReportRendererUtilities.cs | 28 +- .../ImGui/CmGui.Methods.cs | 10 + .../Renderer/ImGuiRenderer.01.Summary.cs | 79 ++- .../ImGuiRenderer.03.EnhancedStacktrace.cs | 26 +- .../ImGuiRenderer.05.InstalledModules.cs | 8 +- .../ImGuiRenderer.06.LoadedLoaderPlugins.cs | 4 +- .../Renderer/ImGuiRenderer.07.Assemblies.cs | 59 +- .../ImGuiRenderer.09.MonoModPatches.cs | 115 ++++ .../ImGuiRenderer.09.RuntimePatches.cs | 109 ++++ ....cs => ImGuiRenderer.10.HarmonyPatches.cs} | 8 +- .../Renderer/ImGuiRenderer.10.LogFiles.cs | 9 +- .../Renderer/ImGuiRenderer.ImGui.cs | 8 +- .../Renderer/ImGuiRenderer.cs | 77 ++- .../CrashReportWinForms.cs | 4 +- .../ICrashReportRendererUtilities.cs | 23 +- src/BUTR.CrashReport.Tool/Program.cs | 2 +- src/BUTR.CrashReport/CrashReportInfo.cs | 50 +- .../Interfaces/IAssemblyUtilities.cs | 2 +- .../Interfaces/ICommonProvider.cs | 13 + .../Interfaces/IHarmonyProvider.cs | 27 +- .../Interfaces/IMonoModProvider.cs | 37 ++ .../Interfaces/IPatchProvider.cs | 16 + src/BUTR.CrashReport/Models/HarmonyPatch.cs | 6 +- src/BUTR.CrashReport/Models/HarmonyPatches.cs | 54 +- src/BUTR.CrashReport/Models/MethodEntry.cs | 12 +- .../Models/MethodEntryHarmony.cs | 8 +- .../Models/MethodEntryMonoMod.cs | 14 + .../Models/MethodEntryRuntimePatch.cs | 12 + .../Models/StackFrameRuntimePatch.cs | 42 ++ .../Models/StacktraceEntry.cs | 22 +- .../Utils/CrashReportModelUtils.cs | 141 ++++- .../Utils/CrashReportUtils.cs | 153 +++-- 73 files changed, 1717 insertions(+), 1115 deletions(-) delete mode 100644 src/BUTR.CrashReport.Bannerlord.Parser/BUTR.CrashReport.Bannerlord.Parser.csproj delete mode 100644 src/BUTR.CrashReport.Bannerlord.Parser/CrashReportParser.cs delete mode 100644 src/BUTR.CrashReport.Bannerlord.Parser/Extensions/IEnumerableExtensions.cs delete mode 100644 src/BUTR.CrashReport.Bannerlord.Parser/Extensions/StringExtensions.cs create mode 100644 src/BUTR.CrashReport.Bannerlord.Source/MonoModProvider.cs create mode 100644 src/BUTR.CrashReport.Bannerlord.Source/MonoModUtils.cs create mode 100644 src/BUTR.CrashReport.Models/AssemblyArchitectureType.cs rename src/BUTR.CrashReport.Models/{AssemblyModelType.cs => AssemblyType.cs} (97%) rename src/BUTR.CrashReport.Models/{CapabilityModuleOrPluginModel.cs => CapabilityModel.cs} (76%) rename src/BUTR.CrashReport.Models/{DependencyMetadataModelType.cs => DependencyMetadataType.cs} (92%) rename src/BUTR.CrashReport.Models/{LogEntry.cs => LogEntryModel.cs} (94%) rename src/BUTR.CrashReport.Models/{LogSource.cs => LogSourceModel.cs} (88%) rename src/BUTR.CrashReport.Models/{MethodExecuting.cs => MethodExecutingModel.cs} (88%) rename src/BUTR.CrashReport.Models/{MethodSimple.cs => MethodSimpleModel.cs} (98%) rename src/BUTR.CrashReport.Models/{MonoModDetourModel.cs => MonoModPatchModel.cs} (51%) rename src/BUTR.CrashReport.Models/{MonoModDetourModelType.cs => MonoModPatchModelType.cs} (88%) rename src/BUTR.CrashReport.Models/{MonoModDetoursModel.cs => MonoModPatchesModel.cs} (85%) create mode 100644 src/BUTR.CrashReport.Models/RuntimePatchModel.cs create mode 100644 src/BUTR.CrashReport.Models/RuntimePatchesModel.cs rename src/BUTR.CrashReport.Models/{UpdateInfoModuleOrLoaderPlugin.cs => UpdateInfo.cs} (89%) create mode 100644 src/BUTR.CrashReport.Renderer.ImGui/Renderer/ImGuiRenderer.09.MonoModPatches.cs create mode 100644 src/BUTR.CrashReport.Renderer.ImGui/Renderer/ImGuiRenderer.09.RuntimePatches.cs rename src/BUTR.CrashReport.Renderer.ImGui/Renderer/{ImGuiRenderer.09.HarmonyPatches.cs => ImGuiRenderer.10.HarmonyPatches.cs} (98%) create mode 100644 src/BUTR.CrashReport/Interfaces/ICommonProvider.cs create mode 100644 src/BUTR.CrashReport/Interfaces/IMonoModProvider.cs create mode 100644 src/BUTR.CrashReport/Interfaces/IPatchProvider.cs create mode 100644 src/BUTR.CrashReport/Models/MethodEntryMonoMod.cs create mode 100644 src/BUTR.CrashReport/Models/MethodEntryRuntimePatch.cs create mode 100644 src/BUTR.CrashReport/Models/StackFrameRuntimePatch.cs diff --git a/src/BUTR.CrashReport.Bannerlord.Parser/BUTR.CrashReport.Bannerlord.Parser.csproj b/src/BUTR.CrashReport.Bannerlord.Parser/BUTR.CrashReport.Bannerlord.Parser.csproj deleted file mode 100644 index f77b8e8..0000000 --- a/src/BUTR.CrashReport.Bannerlord.Parser/BUTR.CrashReport.Bannerlord.Parser.csproj +++ /dev/null @@ -1,61 +0,0 @@ - - - - netstandard2.0 - preview - enable - true - true - - - - Debug;Release - false - true - true - false - - - - - - - - BUTR.CrashReport.Bannerlord.Parser - BUTR.CrashReport.Bannerlord.Parser - Contains the legacy crash report parser for version less than 13 - MIT - https://raw.githubusercontent.com/BUTR/BUTR.CrashReport/master/assets/Icon128x128.png - butr crash report bannerlord - - - - - - - - - - - - - - - - Utils\Anonymizer.cs - - - - - - $(ILRepackExcludeAssemblies);$(ProjectDir)$(OutputPath)BUTR.CrashReport.Models.dll; - - - - - - false - - - - diff --git a/src/BUTR.CrashReport.Bannerlord.Parser/CrashReportParser.cs b/src/BUTR.CrashReport.Bannerlord.Parser/CrashReportParser.cs deleted file mode 100644 index a6d39a5..0000000 --- a/src/BUTR.CrashReport.Bannerlord.Parser/CrashReportParser.cs +++ /dev/null @@ -1,544 +0,0 @@ -using BUTR.CrashReport.Bannerlord.Parser.Extensions; -using BUTR.CrashReport.Models; -using BUTR.CrashReport.Utils; - -using HtmlAgilityPack; - -using System; -using System.Collections.Generic; -using System.Globalization; -using System.IO; -using System.IO.Compression; -using System.Linq; -using System.Text; - -namespace BUTR.CrashReport.Bannerlord.Parser; - -/// -/// Parses a rendered Crash Report -/// -public static class CrashReportParser -{ - private delegate bool MatchSpan(ReadOnlySpan span); - private static IReadOnlyList GetAllOpenTags(ReadOnlySpan content, MatchSpan matcher) - { - var list = new List(); - var span = content; - while (span.IndexOf('<') is var idxOpen and not -1 && span.Slice(idxOpen).IndexOf('>') is var idxClose and not -1) - { - var tag = span.Slice(idxOpen, idxClose + 1); - span = span.Slice(idxOpen + idxClose + 1); - if (tag.Length < 2 || tag[1] == '/' || tag[^2] == '/') continue; - if (matcher(tag)) list.Add(tag.ToString()); - } - return list; - } - - private static IList GetEnhancedStacktrace(ReadOnlySpan rawContent, int version, HtmlNode node) - { - const string enhancedStacktraceStartDelimiter1 = "
"; - const string enhancedStacktraceStartDelimiter2 = "
"; - const string enhancedStacktraceEndDelimiter = "
"; - - var idx = 0; - if (rawContent.IndexOf(enhancedStacktraceStartDelimiter1.AsSpan(), StringComparison.Ordinal) is var enhancedStacktraceStartIdx1 and not -1) idx = enhancedStacktraceStartIdx1; - if (rawContent.IndexOf(enhancedStacktraceStartDelimiter2.AsSpan(), StringComparison.Ordinal) is var enhancedStacktraceStartIdx2 and not -1) idx = enhancedStacktraceStartIdx2; - - if (version < 1000 && idx != -1) - { - var enhancedStacktraceEndIdx = rawContent.Slice(idx).IndexOf(enhancedStacktraceEndDelimiter.AsSpan(), StringComparison.Ordinal) - enhancedStacktraceEndDelimiter.Length; - var enhancedStacktraceRaw = rawContent.Slice(idx, enhancedStacktraceEndIdx).ToString(); - while (GetAllOpenTags(enhancedStacktraceRaw.AsSpan(), span => !span.SequenceEqual(enhancedStacktraceStartDelimiter1.AsSpan()) && !span.SequenceEqual(enhancedStacktraceStartDelimiter2.AsSpan()) && span is not "