Fix bug in stepping after hitting BP
This commit is contained in:
parent
bf0d67a9e0
commit
fb904cc1aa
@ -149,13 +149,16 @@ func (dbp *DebuggedProcess) Step() error {
|
||||
return err
|
||||
}
|
||||
|
||||
bp, ok := dbp.PCtoBP(regs.PC())
|
||||
bp, ok := dbp.PCtoBP(regs.PC() - 1)
|
||||
if ok {
|
||||
err = dbp.restoreInstruction(bp.Addr, bp.OriginalData)
|
||||
_, err = dbp.Clear(bp.Addr)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Reset instruction pointer to our restored instruction.
|
||||
regs.Rip -= 1
|
||||
syscall.PtraceSetRegs(dbp.Pid, regs)
|
||||
}
|
||||
|
||||
err = dbp.handleResult(syscall.PtraceSingleStep(dbp.Pid))
|
||||
|
||||
@ -124,11 +124,12 @@ func TestBreakPoint(t *testing.T) {
|
||||
sleepytimefunc := p.GoSymTable.LookupFunc("main.sleepytime")
|
||||
sleepyaddr := sleepytimefunc.Entry
|
||||
|
||||
_, err = p.Break(uintptr(sleepyaddr))
|
||||
bp, err := p.Break(uintptr(sleepyaddr))
|
||||
if err != nil {
|
||||
t.Fatal("Break():", err)
|
||||
}
|
||||
|
||||
breakpc := bp.Addr + 1
|
||||
err = p.Continue()
|
||||
if err != nil {
|
||||
t.Fatal("Continue():", err)
|
||||
@ -140,8 +141,8 @@ func TestBreakPoint(t *testing.T) {
|
||||
}
|
||||
|
||||
pc := regs.PC()
|
||||
if pc != sleepyaddr+1 {
|
||||
t.Fatalf("Break not respected:\nPC:%d\nFN:%d\n", pc, sleepyaddr)
|
||||
if pc != breakpc {
|
||||
t.Fatalf("Break not respected:\nPC:%d\nFN:%d\n", pc, breakpc)
|
||||
}
|
||||
|
||||
err = p.Step()
|
||||
@ -155,8 +156,8 @@ func TestBreakPoint(t *testing.T) {
|
||||
}
|
||||
|
||||
pc = regs.PC()
|
||||
if pc == sleepyaddr {
|
||||
t.Fatalf("Step not respected:\nPC:%d\nFN:%d\n", pc, sleepyaddr)
|
||||
if pc == breakpc {
|
||||
t.Fatalf("Step not respected:\nPC:%d\nFN:%d\n", pc, breakpc)
|
||||
}
|
||||
|
||||
cmd.Process.Kill()
|
||||
|
||||
Loading…
Reference in New Issue
Block a user