refactor(debug): move watchpoint slot state into the session

This commit is contained in:
2026-09-14 18:22:00 +02:00
parent 909f874797
commit 4f190ee1a2
7 changed files with 38 additions and 51 deletions
+4 -5
View File
@@ -36,7 +36,7 @@ type Condition struct {
func (c *Condition) Eval(regs *Regs) bool {
actual, ok := regs.RegValue(c.Reg)
if !ok {
return true // unknown register — don't block
return true // unknown register, don't block
}
var expected uint64
switch {
@@ -48,7 +48,7 @@ func (c *Condition) Eval(regs *Regs) bool {
}
expected = v
case c.MemAddr != 0:
// Register-memory comparison — requires a Session, not available here.
// Register-memory comparison, requires a Session, not available here.
// Fall back to treating as constant (the caller should resolve).
expected = c.Value
default:
@@ -72,8 +72,7 @@ func (c *Condition) Eval(regs *Regs) bool {
}
}
// Breakpoints manages the set of breakpoints for a Session.
// Breakpoints manages software breakpoints for a debuggee.
// Breakpoints manages the software breakpoints of one Session.
type Breakpoints struct {
t tracer
bps map[uint64]*Breakpoint
@@ -200,7 +199,7 @@ func (bm *Breakpoints) HandleTrap(regs *Regs) *Breakpoint {
}
// Check the condition (if any).
if bp.Cond != nil && !bp.Cond.Eval(regs) {
// Condition not met — restore the byte but do NOT rewind RIP.
// Condition not met, restore the byte but do NOT rewind RIP.
// The process continues from the next instruction (past the INT3).
word, err := bm.t.Peek(trapAddr)
if err == nil {