func (t *Thread) singleStep() (err error) { t.dbp.execPtraceFunc(func() { err = sys.PtraceSingleStep(t.Id) }) if err != nil { return err } _, _, err = wait(t.Id, t.dbp.Pid, 0) return err }
func (t *Thread) singleStep() (err error) { for { t.dbp.execPtraceFunc(func() { err = sys.PtraceSingleStep(t.ID) }) if err != nil { return err } wpid, status, err := t.dbp.wait(t.ID, 0) if err != nil { return err } if wpid == t.ID && status.StopSignal() == sys.SIGTRAP { return nil } } }
func (t *Thread) singleStep() (err error) { for { t.dbp.execPtraceFunc(func() { err = sys.PtraceSingleStep(t.ID) }) if err != nil { return err } wpid, status, err := t.dbp.wait(t.ID, 0) if err != nil { return err } if (status == nil || status.Exited()) && wpid == t.dbp.Pid { t.dbp.postExit() rs := 0 if status != nil { rs = status.ExitStatus() } return ProcessExitedError{Pid: t.dbp.Pid, Status: rs} } if wpid == t.ID && status.StopSignal() == sys.SIGTRAP { return nil } } }
// PtraceSingleStep executes ptrace PTRACE_SINGLE_STEP. func PtraceSingleStep(tid int) error { return sys.PtraceSingleStep(tid) }