diff --git a/DebugAdapter/UIX.DebugAdapter.Server/Handlers/BreakpointHandler.cs b/DebugAdapter/UIX.DebugAdapter.Server/Handlers/BreakpointHandler.cs index db31d92..ce04c5b 100644 --- a/DebugAdapter/UIX.DebugAdapter.Server/Handlers/BreakpointHandler.cs +++ b/DebugAdapter/UIX.DebugAdapter.Server/Handlers/BreakpointHandler.cs @@ -31,6 +31,7 @@ internal class BreakpointHandler(DebugSymbolResolver symbolResolver) { Id = irisBreakpoint.GetHashCode(), InstructionReference = requestedBreakpoint.InstructionReference, + Verified = true, }; dapBreakpoints.Add(dapBreakpoint); } @@ -45,7 +46,7 @@ internal class BreakpointHandler(DebugSymbolResolver symbolResolver) public Task Handle(SetBreakpointsArguments request, CancellationToken cancellationToken) { // Debug symbols are required for setting source (line:column) breakpoints - var fsym = symbolResolver?.GetForFile(request.Source.Path); + var fsym = symbolResolver?.GetForFile(request.Source.Name); if (fsym is null) return Task.FromResult(new SetBreakpointsResponse()); @@ -77,6 +78,7 @@ internal class BreakpointHandler(DebugSymbolResolver symbolResolver) Column = location.Span.Start.Column, EndLine = location.Span.End.Line, EndColumn = location.Span.End.Column, + Verified = true, }; dapBreakpoints.Add(dapBreakpoint); } diff --git a/DebugAdapter/UIX.DebugAdapter.Server/Handlers/SourceHandler.cs b/DebugAdapter/UIX.DebugAdapter.Server/Handlers/SourceHandler.cs new file mode 100644 index 0000000..d6ccbc1 --- /dev/null +++ b/DebugAdapter/UIX.DebugAdapter.Server/Handlers/SourceHandler.cs @@ -0,0 +1,55 @@ +using OmniSharp.Extensions.DebugAdapter.Protocol.Requests; +using System.Diagnostics; +using System.IO; +using System.Threading; +using System.Threading.Tasks; + +namespace Microsoft.Iris.DebugAdapter.Server.Handlers; + +internal class SourceHandler(DebugSymbolResolver symbolResolver) : ISourceHandler, ILoadedSourcesHandler +{ + private const string MIME_IRIS_UIX_XML = "application/vnd.microsoft.iris.uix+xml"; + + public async Task Handle(SourceArguments request, CancellationToken cancellationToken) + { + Debugger.Launch(); + Debugger.Break(); + + var fsym = symbolResolver.GetForFile(request.Source?.Name); + if (fsym is null) + return new SourceResponse(); + + if (fsym.SourceFileName is not null && File.Exists(fsym.SourceFileName)) + { + string text = +#if NETCOREAPP2_0_OR_GREATER || NETSTANDARD2_1_OR_GREATER + await File.ReadAllTextAsync(fsym.SourceFileName, cancellationToken); +#else + File.ReadAllText(fsym.SourceFileName); +#endif + + return new() + { + Content = text, + MimeType = MIME_IRIS_UIX_XML + }; + } + + return new() + { + Content = "TEST SOURCE", + MimeType = MIME_IRIS_UIX_XML + }; + } + + public async Task Handle(LoadedSourcesArguments request, CancellationToken cancellationToken) + { + Debugger.Launch(); + Debugger.Break(); + + return new() + { + Sources = [] + }; + } +} diff --git a/DebugAdapter/UIX.DebugAdapter.Server/Handlers/StackTraceHandler.cs b/DebugAdapter/UIX.DebugAdapter.Server/Handlers/StackTraceHandler.cs new file mode 100644 index 0000000..b65cea9 --- /dev/null +++ b/DebugAdapter/UIX.DebugAdapter.Server/Handlers/StackTraceHandler.cs @@ -0,0 +1,32 @@ +using OmniSharp.Extensions.DebugAdapter.Protocol.Requests; +using System.Collections.Generic; +using System.Diagnostics; +using System.Threading; +using System.Threading.Tasks; +using DapStackFrame = OmniSharp.Extensions.DebugAdapter.Protocol.Models.StackFrame; + +namespace Microsoft.Iris.DebugAdapter.Server.Handlers; + +internal class StackTraceHandler : StackTraceHandlerBase +{ + public override async Task Handle(StackTraceArguments request, CancellationToken cancellationToken) + { + Debugger.Launch(); + Debugger.Break(); + + List stackFrames = [ + new() + { + Source = new() + { + Path = "NowPlayingMusicBackground.uix" + } + } + ]; + + return new StackTraceResponse + { + StackFrames = stackFrames + }; + } +} diff --git a/DebugAdapter/UIX.DebugAdapter.Server/IrisDebugAdapterServer.cs b/DebugAdapter/UIX.DebugAdapter.Server/IrisDebugAdapterServer.cs index 5409c37..2a8f8ab 100644 --- a/DebugAdapter/UIX.DebugAdapter.Server/IrisDebugAdapterServer.cs +++ b/DebugAdapter/UIX.DebugAdapter.Server/IrisDebugAdapterServer.cs @@ -2,6 +2,7 @@ using Microsoft.Iris.Debug; using Microsoft.Iris.Debug.Data; using Microsoft.Iris.DebugAdapter.Server.Handlers; +using Newtonsoft.Json.Linq; using OmniSharp.Extensions.DebugAdapter.Protocol.Events; using OmniSharp.Extensions.DebugAdapter.Server; using System; @@ -38,22 +39,6 @@ public class IrisDebugAdapterServer : IDebuggerServer, IRemoteDebuggerState, IDi if (Server is null) return; - - if (value is InterpreterCommand.Continue) - { - Server.SendContinued(new() - { - ThreadId = 0, - }); - } - else if (value is InterpreterCommand.Break) - { - Server.SendStopped(new() - { - Reason = new("unknown"), - ThreadId = 0, - }); - } } } @@ -86,7 +71,7 @@ public class IrisDebugAdapterServer : IDebuggerServer, IRemoteDebuggerState, IDi .WithHandler() //.WithHandler() .WithHandler() - //.WithHandler() + .WithHandler() //.WithHandler() //.WithHandler() .WithHandler() @@ -94,7 +79,7 @@ public class IrisDebugAdapterServer : IDebuggerServer, IRemoteDebuggerState, IDi .WithHandler() .WithHandler() //.WithHandler() - //.WithHandler() + .WithHandler() //.WithHandler() //.WithHandler() // The OnInitialize delegate gets run when we first receive the _Initialize_ request: @@ -158,7 +143,22 @@ public class IrisDebugAdapterServer : IDebuggerServer, IRemoteDebuggerState, IDi public void WaitForContinue() { + System.Diagnostics.Debugger.Launch(); + if (DebuggerCommand is InterpreterCommand.Break) + { + Server?.SendStopped(new() + { + Reason = new("unknown"), + ThreadId = 0, + }); + } + while (DebuggerCommand is InterpreterCommand.Break) ; + + Server?.SendContinued(new() + { + ThreadId = 0, + }); } public void Start()