Skip to content

Commit c6ce96c

Browse files
committed
fix deleting breakpoints not working properly
1 parent 8baf96d commit c6ce96c

File tree

2 files changed

+47
-45
lines changed

2 files changed

+47
-45
lines changed

src/mobdap/debug_server.clj

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818

1919
(defn send-line! [server line]
2020
(let [writer (get-in server [:client :writer])]
21-
(log/info "Server -> Client:" line)
21+
(log/info "Debug Server -> Debuggee" line)
2222
(doto writer
2323
(.write line)
2424
(.write "\n")
@@ -27,12 +27,11 @@
2727
(defn read-response! [server]
2828
(let [reader (get-in server [:client :reader])]
2929
(when-let [message (.readLine reader)]
30-
(log/info "Client -> Server:" message)
30+
(log/info "Debuggee -> Debug Server:" message)
3131
(string/trim message))))
3232

3333
(defn- send-command! [server command]
3434
(let [command (string/upper-case command)]
35-
(log/info "Send Command:" command)
3635
(send-line! server command)
3736
(when (read-response! server)
3837
(loop []
@@ -76,6 +75,9 @@
7675
(do (log/error "Unknown Error:" breakpoint)
7776
nil)))))))))
7877

78+
(defn send-command-delb! [server file line]
79+
(send-line! server (format "DELB %s %d" file line)))
80+
7981
(defn send-command-setb! [server file line]
8082
(send-line! server (format "SETB %s %d" file line)))
8183

@@ -85,7 +87,6 @@
8587
(lua/extract-table stack-code)
8688
nil))
8789

88-
; TODO: this doesnt actually work
8990
(defn is-connected? [socket]
9091
(and (not (.isClosed socket))
9192
(.isConnected socket)
@@ -97,7 +98,7 @@
9798
(with-open [server-socket (ServerSocket. port)]
9899
(try
99100
(let [client (.accept server-socket)
100-
_ (log/info "Client connected" client)
101+
_ (log/info "Debuggee connected" client)
101102
writer (PrintWriter. (.getOutputStream client) true)
102103
reader (BufferedReader. (InputStreamReader. (.getInputStream client)))
103104
server-handle {:client {:socket client
@@ -114,14 +115,18 @@
114115

115116
(go-loop []
116117
(when-let [command (<!! to-debug-server)]
117-
(log/info "Command to debug server" command)
118+
(log/info "Handler -> Debug Server:" command)
118119
(case (:cmd command)
119120
:run (send-command! server-handle "run")
120121

121-
; TODO: delete all prior breakpoints by using "LISTB" -> "DELB"
122-
:set-breakpoints (doseq [[filename breakpoints] (:breakpoints command)
123-
{:keys [line]} breakpoints]
124-
(send-command-setb! server-handle filename line))
122+
:set-breakpoints (do
123+
; this command only gets called before executing a command so we
124+
; can just delete and re-apply all breakpoints
125+
(send-command-delb! server-handle "*" 0)
126+
127+
(doseq [[filename breakpoints] (:breakpoints command)
128+
{:keys [line]} breakpoints]
129+
(send-command-setb! server-handle filename line)))
125130

126131
:step-in (send-command! server-handle "step")
127132

@@ -143,7 +148,7 @@
143148
(loop []
144149
; TODO: this actually doesnt work but we should shut down mobdap when client is gone
145150
(when (not (is-connected? client))
146-
(log/info "Lost connection to client, exitting...")
151+
(log/info "Lost connection to debuggee, exitting...")
147152
(System/exit 0))
148153
(recur)))
149154

src/mobdap/handler.clj

Lines changed: 31 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,17 @@
9999
:event event
100100
:body body}))
101101

102+
(defn- send-command-to-debug-server
103+
([handler command] (send-command-to-debug-server handler command false))
104+
([handler command update-breakpoints?]
105+
(let [to-debug-server (get-in handler [:channels :to-debug-server])]
106+
(assert (some? to-debug-server))
107+
108+
(when update-breakpoints?
109+
(>!! to-debug-server {:cmd :set-breakpoints :breakpoints (:breakpoints handler)}))
110+
111+
(>!! to-debug-server command))))
112+
102113
(defn handle-initialize [handler message]
103114
(let [response
104115
(success
@@ -264,15 +275,14 @@
264275
:breakpoint (let [file (get-in command [:breakpoint :file])
265276
line (get-in command [:breakpoint :line])
266277
id (find-breakpoint-id handler file line)]
267-
(assert (some? id))
268278
(adapter/send-message!
269279
(:adapter handler)
270280
(event
271281
"stopped"
272282
{:reason "breakpoint"
273283
:allThreadsStopped true
274284
:threadId 1
275-
:hitBreakpointIds [id]})))
285+
:hitBreakpointIds (vec (filter some? [id]))})))
276286

277287
(:step :out :over)
278288
(adapter/send-message!
@@ -344,11 +354,7 @@
344354
;
345355
(defn handle-configuration-done [handler message]
346356
(adapter/send-message! (:adapter handler) (success (:seq message) "configurationDone" nil))
347-
348-
(let [to-debug-server (get-in handler [:channels :to-debug-server])]
349-
(>!! to-debug-server {:cmd :set-breakpoints :breakpoints (:breakpoints handler)})
350-
(>!! to-debug-server {:cmd :run}))
351-
357+
(send-command-to-debug-server handler {:cmd :run} true)
352358
handler)
353359

354360
(defn handle-threads [handler message]
@@ -357,12 +363,9 @@
357363
handler)
358364

359365
(defn handle-stacktrace [handler message]
360-
(let [to-debug-server (get-in handler [:channels :to-debug-server])
361-
start-frame (get-in message [:arguments :startFrame])
366+
(let [start-frame (get-in message [:arguments :startFrame])
362367
levels (get-in message [:arguments :levels])]
363-
364-
(>!! to-debug-server {:cmd :stacktrace :start start-frame :length levels :seq (:seq message)})
365-
368+
(send-command-to-debug-server handler {:cmd :stacktrace :start start-frame :length levels :seq (:seq message)})
366369
handler))
367370

368371
(defn- create-scope [frame vars name hint]
@@ -387,7 +390,7 @@
387390
(:adapter handler)
388391
(success (:seq message)
389392
"scopes"
390-
{:scopes (filter some? [stack-scope upvals-scope])}))
393+
{:scopes (vec (filter some? [stack-scope upvals-scope]))}))
391394
handler))
392395

393396
(defn- find-vars-scope-by-id [data id]
@@ -537,10 +540,10 @@
537540
(assert (and (some? vars) (some? type)))
538541

539542
(let [variables
540-
(filter some? (case type
541-
:scope (create-scope-variables vars)
542-
:vars (create-variables vars)
543-
:else []))]
543+
(vec (filter some? (case type
544+
:scope (create-scope-variables vars)
545+
:vars (create-variables vars)
546+
:else [])))]
544547

545548
(adapter/send-message!
546549
(:adapter handler)
@@ -550,33 +553,27 @@
550553
handler))
551554

552555
(defn handle-continue [handler message]
553-
(let [to-debug-server (get-in handler [:channels :to-debug-server])]
554-
(>!! to-debug-server {:cmd :set-breakpoints :breakpoints (:breakpoints handler)})
555-
(>!! to-debug-server {:cmd :run}))
556+
(send-command-to-debug-server handler {:cmd :run} true)
556557
(adapter/send-message! (:adapter handler) (success (:seq message) "continue" nil))
557558
handler)
558559

559560
(defn handle-step-in [handler message]
560-
(let [to-debug-server (get-in handler [:channels :to-debug-server])]
561-
(>!! to-debug-server {:cmd :set-breakpoints :breakpoints (:breakpoints handler)})
562-
(>!! to-debug-server {:cmd :step-in})
563-
(adapter/send-message! (:adapter handler) (success (:seq message) "stepIn" nil))
564-
handler))
561+
(send-command-to-debug-server handler {:cmd :step-in} true)
562+
(adapter/send-message! (:adapter handler) (success (:seq message) "stepIn" nil))
563+
handler)
565564

566565
(defn handle-step-out [handler message]
567-
(let [to-debug-server (get-in handler [:channels :to-debug-server])]
568-
(>!! to-debug-server {:cmd :step-out})
569-
(adapter/send-message! (:adapter handler) (success (:seq message) "stepOut" nil))
570-
handler))
566+
(send-command-to-debug-server handler {:cmd :step-out} true)
567+
(adapter/send-message! (:adapter handler) (success (:seq message) "stepOut" nil))
568+
handler)
571569

572570
(defn handle-next [handler message]
573-
(let [to-debug-server (get-in handler [:channels :to-debug-server])]
574-
(>!! to-debug-server {:cmd :over})
575-
(adapter/send-message! (:adapter handler) (success (:seq message) "next" nil))
576-
handler))
571+
(send-command-to-debug-server handler {:cmd :over} true)
572+
(adapter/send-message! (:adapter handler) (success (:seq message) "next" nil))
573+
handler)
577574

578575
(defn handle-terminate [handler message]
579-
(>!! (get-in handler [:channels :to-debug-server]) {:cmd :exit})
576+
(send-command-to-debug-server handler {:cmd :exit})
580577
(adapter/send-message! (:adapter handler) (success (:seq message) "terminate" nil))
581578
handler)
582579

0 commit comments

Comments
 (0)