Skip to content

Commit 8e75b11

Browse files
committed
Show better error messages for thread or target out of range, allow pausing with debugger item
1 parent 9900bf3 commit 8e75b11

File tree

5 files changed

+37
-27
lines changed

5 files changed

+37
-27
lines changed

Common/src/main/kotlin/gay/object/hexdebug/adapter/DebugAdapter.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -320,7 +320,7 @@ class DebugAdapter(val player: ServerPlayer) : IDebugProtocolServer {
320320
isConnected = true
321321
state.launchArgs = LaunchArgs(args)
322322
remoteProxy.initialized()
323-
player.displayClientMessage(Component.translatable("text.hexdebug.connected"), true)
323+
player.displayClientMessage(Component.translatable("text.hexdebug.debugging.connected"), true)
324324
return futureOf()
325325
}
326326

Common/src/main/kotlin/gay/object/hexdebug/items/DebuggerItem.kt

Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -111,32 +111,36 @@ class DebuggerItem(
111111
val debugger = debugAdapter.debugger(threadId)
112112
if (debugger != null) {
113113
if (!debugger.debugEnv.isCasterInRange) {
114+
player.displayClientMessage("text.hexdebug.debugging.out_of_range".asTranslatedComponent, true)
114115
return InteractionResultHolder.fail(stack)
115116
}
116117

117-
// TODO: implement pause?
118-
119-
// step the ongoing debug session
120-
debugAdapter.apply {
121-
when (getStepMode(stack)) {
122-
StepMode.CONTINUE -> continue_(ContinueArguments().also {
118+
val stepMode = getStepMode(stack)
119+
if (debugger.state.canPause && stepMode.canPause) {
120+
debugAdapter.pause(PauseArguments().also {
121+
it.threadId = threadId
122+
})
123+
} else {
124+
// step the ongoing debug session
125+
when (stepMode) {
126+
StepMode.CONTINUE -> debugAdapter.continue_(ContinueArguments().also {
123127
it.threadId = threadId
124128
it.singleThread = true
125129
})
126-
StepMode.OVER -> next(NextArguments().also {
130+
StepMode.OVER -> debugAdapter.next(NextArguments().also {
127131
it.threadId = threadId
128132
it.singleThread = true
129133
})
130-
StepMode.IN -> stepIn(StepInArguments().also {
134+
StepMode.IN -> debugAdapter.stepIn(StepInArguments().also {
131135
it.threadId = threadId
132136
it.singleThread = true
133137
})
134-
StepMode.OUT -> stepOut(StepOutArguments().also {
138+
StepMode.OUT -> debugAdapter.stepOut(StepOutArguments().also {
135139
it.threadId = threadId
136140
it.singleThread = true
137141
})
138-
StepMode.RESTART -> restartThread(threadId)
139-
StepMode.STOP -> terminateThreads(TerminateThreadsArguments().also {
142+
StepMode.RESTART -> debugAdapter.restartThread(threadId)
143+
StepMode.STOP -> debugAdapter.terminateThreads(TerminateThreadsArguments().also {
140144
it.threadIds = intArrayOf(threadId)
141145
})
142146
}
@@ -163,6 +167,7 @@ class DebuggerItem(
163167
try {
164168
debugEnv.start(threadId)
165169
} catch (_: DebugException) {
170+
player.displayClientMessage("text.hexdebug.debugging.illegal_thread".asTranslatedComponent, true)
166171
return InteractionResultHolder.fail(stack)
167172
}
168173
}
@@ -260,12 +265,12 @@ class DebuggerItem(
260265
}
261266
}
262267

263-
enum class StepMode {
264-
CONTINUE,
265-
OVER,
266-
IN,
267-
OUT,
268-
RESTART,
269-
STOP,
268+
enum class StepMode(val canPause: Boolean) {
269+
CONTINUE(canPause = true),
270+
OVER(canPause = true),
271+
IN(canPause = true),
272+
OUT(canPause = true),
273+
RESTART(canPause = false),
274+
STOP(canPause = false),
270275
}
271276
}

Common/src/main/kotlin/gay/object/hexdebug/items/EvaluatorItem.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ class EvaluatorItem(
4242
val debugAdapter = DebugAdapterManager[player]
4343
val debugger = debugAdapter?.debugger(threadId)
4444
if (debugAdapter == null || debugger == null) {
45-
player.displayClientMessage("text.hexdebug.no_session".asTranslatedComponent(threadId), true)
45+
player.displayClientMessage("text.hexdebug.debugging.no_session".asTranslatedComponent(threadId), true)
4646
return InteractionResultHolder.fail(itemStack)
4747
}
4848

@@ -51,7 +51,7 @@ class EvaluatorItem(
5151
}
5252

5353
if (debugger.state != DebuggerState.PAUSED) {
54-
player.displayClientMessage("text.hexdebug.not_paused".asTranslatedComponent(threadId), true)
54+
player.displayClientMessage("text.hexdebug.debugging.not_paused".asTranslatedComponent(threadId), true)
5555
return InteractionResultHolder.fail(itemStack)
5656
}
5757

Common/src/main/kotlin/gay/object/hexdebug/networking/handler/ClientMessageHandler.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ fun HexDebugMessageS2C.applyOnClient(ctx: PacketContext) = ctx.queue {
6363
if (shouldPrint) {
6464
ctx.player.displayClientMessage(
6565
Component.translatable(
66-
"text.hexdebug.debugger_stopped",
66+
"text.hexdebug.debugging.debugger_stopped",
6767
if (config.showDebugClientLineNumber) line else index,
6868
iota,
6969
),

Common/src/main/resources/assets/hexdebug/lang/en_us.flatten.json5

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,17 @@
1616

1717
text: {
1818
hexdebug: {
19-
connected: "Debug client connected!",
20-
no_session: "Debug session is not running for thread %d.",
21-
not_paused: "Debug session is not paused for thread %d.",
19+
debugging: {
20+
connected: "Debug client connected!",
21+
no_session: "Debug session is not running for thread %d.",
22+
not_paused: "Debug session is not paused for thread %d.",
23+
// Next Iota: [{index}] {iota}
24+
debugger_stopped: "Next Iota: [%d] %s",
25+
illegal_thread: "The item failed, somehow... am I not skilled enough?",
26+
out_of_range: "Debuggee is out of range.",
27+
},
28+
2229
thwack: "Thwack!",
23-
// Next Iota: [{index}] {iota}
24-
debugger_stopped: "Next Iota: [%d] %s",
2530

2631
splicing_table: {
2732
button: {

0 commit comments

Comments
 (0)