@@ -199,6 +199,11 @@ func (d *Debugger) shouldBreak(node ast.Node) bool {
199199 // 更新命中次数
200200 bp .HitCount ++
201201
202+ // 捕获当前解释器状态
203+ d .currentPos = pos
204+ d .variables = d .interpreter .GetCurrentEnvironment ().GetAll ()
205+ d .callStack = d .interpreter .GetInterpreterCallStack ()
206+
202207 // 通知监听器
203208 d .notifyBreakpointHit (bp , pos )
204209
@@ -306,17 +311,27 @@ func (d *Debugger) handleCommand(cmd DebugCommand) {
306311}
307312
308313func (d * Debugger ) pause () {
314+ d .isPaused = true
309315 d .notifyClient (& DebugState {})
310316
311- <- d .resumeChan
317+ // 等待恢复命令
318+ cmd := <- d .resumeChan
319+ // 处理恢复命令
320+ d .handleCommand (cmd )
312321}
313322
314323func (d * Debugger ) notifyClient (* DebugState ) {}
315324
316- func (d * Debugger ) stepInto () {}
317- func (d * Debugger ) stepOver () {}
318- func (d * Debugger ) stepOut () {}
319- func (d * Debugger ) continue_ () {}
325+ func (d * Debugger ) stepInto () {}
326+ func (d * Debugger ) stepOver () {}
327+ func (d * Debugger ) stepOut () {}
328+ func (d * Debugger ) continue_ () {
329+ // 发送恢复命令到 resumeChan
330+ select {
331+ case d .resumeChan <- DebugCommand {Type : CmdContinue }:
332+ default :
333+ }
334+ }
320335func (d * Debugger ) inspectVariable () {}
321336
322337func (d * Debugger ) AddListener (listener DebugListener ) {
@@ -335,20 +350,17 @@ func (d *Debugger) GetVariables() map[string]interface{} {
335350 return d .variables
336351}
337352
338- func (d * Debugger ) pushCallFrame (frame * CallFrame ) {
339- d .callStack = append (d .callStack , frame )
340- }
341-
342- func (d * Debugger ) popCallFrame () {
343- if len (d .callStack ) > 0 {
344- d .callStack = d .callStack [:len (d .callStack )- 1 ]
345- }
346- }
347-
348353func (d * Debugger ) getCurrentFile () string {
349354 if len (d .callStack ) > 0 {
350355 return d .callStack [len (d .callStack )- 1 ].File
351356 }
357+ // 如果没有调用栈,返回第一个断点的文件名
358+ d .breakpointMutex .RLock ()
359+ defer d .breakpointMutex .RUnlock ()
360+
361+ for filename := range d .breakpoints {
362+ return filename
363+ }
352364 return "unknown"
353365}
354366
@@ -357,6 +369,22 @@ func (d *Debugger) SetFileContent(filename, content string) {
357369 d .fileSet .AddFile (filename , content )
358370}
359371
372+ // SetCurrentFile 设置当前文件名
373+ func (d * Debugger ) SetCurrentFile (filename string ) {
374+ // 创建一个默认的调用栈帧来设置当前文件
375+ if len (d .callStack ) == 0 {
376+ frame := & CallFrame {
377+ FunctionName : "main" ,
378+ File : filename ,
379+ Line : 1 ,
380+ Variables : make (map [string ]interface {}),
381+ }
382+ d .callStack = append (d .callStack , frame )
383+ } else {
384+ d .callStack [0 ].File = filename
385+ }
386+ }
387+
360388func (d * Debugger ) getLineFromPos (pos token.Pos ) int {
361389 if ! pos .IsValid () {
362390 return 1
0 commit comments