Skip to content

Commit 76a232b

Browse files
committed
Make sure that a column is provided in stack frames
1 parent 83bfb67 commit 76a232b

File tree

4 files changed

+16
-2
lines changed

4 files changed

+16
-2
lines changed

adapter/src/main/kotlin/org/javacs/ktda/adapter/DAPConverter.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ private typealias InternalException = org.javacs.ktda.core.exception.DebuggeeExc
3333
* using ObjectPools and ids.
3434
*/
3535
class DAPConverter(
36-
var lineConverter: LineNumberConverter = LineNumberConverter()
36+
var lineConverter: LineNumberConverter = LineNumberConverter(),
37+
var columnConverter: LineNumberConverter = LineNumberConverter()
3738
) {
3839
val stackFramePool = ObjectPool<Long, InternalStackFrame>() // Contains stack frames owned by thread ids
3940
val variablesPool = ObjectPool<Unit, VariableTreeNode>() // Contains unowned variable trees (the ids are used as 'variables references')
@@ -78,7 +79,7 @@ class DAPConverter(
7879
id = stackFramePool.store(threadId, internalFrame)
7980
name = internalFrame.name
8081
line = internalFrame.position?.lineNumber?.let(lineConverter::toExternalLine) ?: 0L
81-
column = 0L
82+
column = (internalFrame.position?.columnNumber ?: 1).let(columnConverter::toExternalLine)
8283
source = internalFrame.position?.source?.let(::toDAPSource)
8384
}
8485

adapter/src/main/kotlin/org/javacs/ktda/adapter/KotlinDebugAdapter.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,9 @@ class KotlinDebugAdapter(
5757
converter.lineConverter = LineNumberConverter(
5858
externalLineOffset = if (args.linesStartAt1) 0L else -1L
5959
)
60+
converter.columnConverter = LineNumberConverter(
61+
externalLineOffset = if (args.columnsStartAt1) 0L else -1L
62+
)
6063

6164
val capabilities = Capabilities()
6265
capabilities.supportsConfigurationDoneRequest = true
@@ -395,6 +398,8 @@ class KotlinDebugAdapter(
395398
val exception = id?.let { exceptionsPool.getByID(it) }
396399
ExceptionInfoResponse().apply {
397400
exceptionId = id?.toString() ?: ""
401+
description = exception?.description ?: "Unknown exception"
402+
breakMode = ExceptionBreakMode.ALWAYS
398403
details = exception?.let(converter::toDAPExceptionDetails)
399404
}
400405
}

adapter/src/main/kotlin/org/javacs/ktda/core/exception/DebuggeeException.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.javacs.ktda.core.exception
22

33
interface DebuggeeException {
4+
val description: String
45
val message: String?
56
get() = null
67
val typeName: String?

adapter/src/main/kotlin/org/javacs/ktda/jdi/exception/JDIException.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,13 @@ class JDIException(
1212

1313
override val fullTypeName: String by lazy { type.name() }
1414
override val typeName: String? by lazy { fullTypeName.split(".").last() }
15+
override val description: String by lazy {
16+
type.methodsByName("toString")
17+
.firstOrNull()
18+
?.let { exception.invokeMethod(thread, it, emptyList(), 0) }
19+
?.toString()
20+
?: fullTypeName
21+
}
1522
override val message: String? by lazy {
1623
type.methodsByName("getMessage")
1724
.firstOrNull()

0 commit comments

Comments
 (0)