Skip to content
This repository was archived by the owner on Aug 26, 2021. It is now read-only.

Commit a48aaf5

Browse files
committed
Ignore setBreakpoints request if launch failed.
Fixes #33. Also ensure thread started event is only set once launch has started.
1 parent 5ad9a1a commit a48aaf5

File tree

1 file changed

+10
-6
lines changed

1 file changed

+10
-6
lines changed

src/main/scala/ddb/debugger/dapodil/DAPodil.scala

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -127,15 +127,14 @@ class DAPodil(
127127

128128
_ <- launched match {
129129
case Left(t) =>
130-
Logger[IO].warn(t)(show"couldn't launch, request $request") *>
130+
state.set(DAPodil.State.FailedToLaunch(request, t)) *>
131+
Logger[IO].warn(t)(show"couldn't launch, request $request") *>
131132
session.sendResponse(
132133
request.respondFailure(Some(show"Couldn't launch Daffodil debugger: ${t.getMessage()}"))
133134
)
134135
case Right(launchedState) =>
135-
for {
136-
_ <- session.sendResponse(request.respondSuccess())
137-
_ <- state.set(launchedState)
138-
} yield ()
136+
state.set(launchedState) *>
137+
session.sendResponse(request.respondSuccess())
139138
}
140139
} yield ()
141140
}
@@ -158,6 +157,9 @@ class DAPodil(
158157
)
159158
_ <- session.sendResponse(response)
160159
} yield ()
160+
case _: DAPodil.State.FailedToLaunch =>
161+
Logger[IO].warn("ignoring setBreakPoints request since previous launch failed") *>
162+
session.sendResponse(request.respondFailure())
161163
case s => DAPodil.InvalidState.raise(request, "Launched", s)
162164
}
163165

@@ -421,14 +423,14 @@ object DAPodil extends IOApp {
421423
val stackTrace: IO[StackTrace] = debugee.data.get.map(_.stack)
422424
val threads: IO[List[Types.Thread]] = debugee.data.get.map(_.threads)
423425
}
426+
case class FailedToLaunch(request: Request, cause: Throwable) extends State
424427

425428
object Launched {
426429
def resource(
427430
session: DAPSession[Response, DebugEvent],
428431
debugee: Resource[IO, Debugee]
429432
): Resource[IO, Launched] =
430433
for {
431-
_ <- Resource.eval(session.sendEvent(new Events.ThreadEvent("started", 1L)))
432434
debugee <- debugee.onFinalizeCase(ec => Logger[IO].debug(s"debugee: $ec"))
433435

434436
_ <- Resource.eval(
@@ -461,6 +463,8 @@ object DAPodil extends IOApp {
461463
.resource
462464
.lastOrError
463465
.onFinalizeCase(ec => Logger[IO].debug(s"launched: $ec"))
466+
467+
_ <- Resource.eval(session.sendEvent(new Events.ThreadEvent("started", 1L)))
464468
} yield launched
465469
}
466470

0 commit comments

Comments
 (0)