Skip to content

Rework the debugger contracts while nothing implements them - #358

Draft
danielpourbakhsh wants to merge 1 commit into
one-ware:mainfrom
FEntwumS:feature/debugger-contracts-rework
Draft

Rework the debugger contracts while nothing implements them#358
danielpourbakhsh wants to merge 1 commit into
one-ware:mainfrom
FEntwumS:feature/debugger-contracts-rework

Conversation

@danielpourbakhsh

@danielpourbakhsh danielpourbakhsh commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

OneWare.Essentials/Debugger is published API with no implementer in this tree yet, so every signature in it can still change without breaking anyone. That window closes as soon as one exists — this is the change to make while it is open.

  • IDebugAdapterIDebugSessionLauncher, IDebugLaunchProviderIDebugTargetPreparer. The old names described patterns, the new ones say what the implementer actually does. AdapterId on the request follows as BackendId.
  • RegisterValueDebugRegisterValue, so that every published entity shares one prefix.
  • New DebugTargetProfile — what the debugger needs to know about a target beyond its executable: bytes per addressable unit, byte order, which registers exist, how many breakpoints it holds, whether it keeps a call stack. A generic panel can derive none of that. On a machine whose smallest addressable unit is wider than a byte, the debug information reports addresses in units while the backend reads bytes, and nothing in the panel could know the factor. Every member has a byte-addressed default, so a target that states nothing behaves exactly as today.
  • DebugLaunchRequest gains InitCommands, the commands a backend applies before it connects to the target. The alternative is a file next to the executable whose name both sides have to agree on without either contract saying so.

Nothing outside this folder references the old names, so the rename is self-contained. Builds on its own against main.

OneWare.Essentials/Debugger is published API but has no implementer in this
tree, so every signature here can still change without breaking anyone. That
window closes as soon as one exists.

IDebugAdapter becomes IDebugSessionLauncher and IDebugLaunchProvider becomes
IDebugTargetPreparer: the old names described patterns, the new ones say what
the implementer does. AdapterId on the request follows as BackendId, and
RegisterValue becomes DebugRegisterValue so that every published entity shares
one prefix.

DebugTargetProfile is new. It carries what the debugger needs to know about a
target beyond its executable - bytes per addressable unit, byte order, the
register names that exist, how many breakpoints it holds, whether it keeps a
call stack. A generic panel can derive none of that: on a machine whose
smallest addressable unit is wider than a byte, the debug information reports
addresses in units while the backend reads bytes, and nothing in the panel
could know the factor. Every member has a byte-addressed default, so a target
that states nothing behaves exactly as before.

DebugLaunchRequest gains InitCommands, the commands a backend applies before
it connects to the target. The alternative is a file next to the executable
whose name both sides have to agree on without either contract saying so.
@danielpourbakhsh
danielpourbakhsh force-pushed the feature/debugger-contracts-rework branch from f877ff1 to 888e201 Compare September 4, 2026 20:49
@danielpourbakhsh danielpourbakhsh changed the title Rework the debug contracts before anything implements them Rework the debugger contracts while nothing implements them Sep 4, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant