boot: implement --unhandled-exception=stalldebug (#1690)

Using this option will stall the crashed thread until the debugger
attaches, so that the newly attached debugger can be handed over the
exception, enabling breaking at correct stack location.

`--no-exception-handlers` injector option controlled whether Dalamud
Crash Handler would intercept exceptions before. Those are now either
`default` or `none` option for `--unhandled-exception`.
This commit is contained in:
srkizer 2024-04-21 13:20:11 +09:00 committed by GitHub
parent b85914c54c
commit 8ff4662f1f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 101 additions and 13 deletions

View file

@ -145,7 +145,7 @@ public record DalamudStartInfo
public bool CrashHandlerShow { get; set; }
/// <summary>
/// Gets or sets a value indicating whether to disable all kinds of global exception handlers.
/// Gets or sets a value indicating how to deal with unhandled exceptions.
/// </summary>
public bool NoExceptionHandlers { get; set; }
public UnhandledExceptionHandlingMode UnhandledException { get; set; }
}

View file

@ -0,0 +1,16 @@
namespace Dalamud.Common;
/// <summary>Enum describing what to do on unhandled exceptions.</summary>
public enum UnhandledExceptionHandlingMode
{
/// <summary>Always show Dalamud Crash Handler on crash, except for some exceptions.</summary>
/// <remarks>See `vectored_exception_handler` in `veh.cpp`.</remarks>
Default,
/// <summary>Waits for debugger if none is attached, and pass the exception to the next handler.</summary>
/// <remarks>See `exception_handler` in `veh.cpp`.</remarks>
StallDebug,
/// <summary>Do not register an exception handler.</summary>
None,
}