mirror of
https://github.com/par274/sharpemu.git
synced 2026-07-31 15:09:42 +08:00
Add live debugger frontend and mutex stall recovery (#383)
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
// Copyright (C) 2026 SharpEmu Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
using SharpEmu.Core.Cpu.Debugging;
|
||||
using SharpEmu.Debugger.Breakpoints;
|
||||
using SharpEmu.HLE;
|
||||
|
||||
namespace SharpEmu.Debugger.Session;
|
||||
|
||||
/// <summary>
|
||||
/// Describes a stop delivered to debugger clients: why the target stopped,
|
||||
/// where, and the register snapshot at that point.
|
||||
/// </summary>
|
||||
public sealed class DebugStopEvent
|
||||
{
|
||||
public DebugStopEvent(
|
||||
DebugStopReason reason,
|
||||
DebugRegisterFile registers,
|
||||
CpuDebugFrameKind frameKind,
|
||||
string frameLabel,
|
||||
Breakpoint? breakpoint = null,
|
||||
OrbisGen2Result? result = null,
|
||||
string? detail = null,
|
||||
string? opcodeBytes = null,
|
||||
CpuStallInfo? stallInfo = null)
|
||||
{
|
||||
Reason = reason;
|
||||
Registers = registers;
|
||||
FrameKind = frameKind;
|
||||
FrameLabel = frameLabel ?? string.Empty;
|
||||
Breakpoint = breakpoint;
|
||||
Result = result;
|
||||
Detail = detail;
|
||||
OpcodeBytes = opcodeBytes;
|
||||
StallInfo = stallInfo;
|
||||
}
|
||||
|
||||
public DebugStopReason Reason { get; }
|
||||
|
||||
/// <summary>The instruction pointer where the target stopped.</summary>
|
||||
public ulong Address => Registers.Rip;
|
||||
|
||||
public DebugRegisterFile Registers { get; }
|
||||
|
||||
public CpuDebugFrameKind FrameKind { get; }
|
||||
|
||||
public string FrameLabel { get; }
|
||||
|
||||
/// <summary>The breakpoint responsible for the stop, when applicable.</summary>
|
||||
public Breakpoint? Breakpoint { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The frame result for a <see cref="DebugStopReason.Fault"/> stop; null for
|
||||
/// non-fault stops.
|
||||
/// </summary>
|
||||
public OrbisGen2Result? Result { get; }
|
||||
|
||||
/// <summary>A human-readable summary of a fault, when applicable.</summary>
|
||||
public string? Detail { get; }
|
||||
|
||||
/// <summary>
|
||||
/// A hex preview of the bytes at <see cref="Address"/> (the faulting
|
||||
/// instruction), when the stop is a fault and the bytes were readable.
|
||||
/// </summary>
|
||||
public string? OpcodeBytes { get; }
|
||||
|
||||
/// <summary>Structured backend evidence for a stall stop.</summary>
|
||||
public CpuStallInfo? StallInfo { get; }
|
||||
}
|
||||
Reference in New Issue
Block a user