terminal: do not crash when process exits during next

Fixes #1090
This commit is contained in:
aarzilli 2018-01-26 15:48:47 +01:00 committed by Derek Parker
parent 74d330a013
commit 045763ef04
2 changed files with 26 additions and 4 deletions

@ -783,11 +783,18 @@ func scopePrefixSwitch(t *Term, ctx callContext) error {
return nil
}
func exitedToError(state *api.DebuggerState, err error) (*api.DebuggerState, error) {
if err == nil && state.Exited {
return nil, fmt.Errorf("Process has exited with status %d", state.ExitStatus)
}
return state, err
}
func step(t *Term, ctx callContext, args string) error {
if err := scopePrefixSwitch(t, ctx); err != nil {
return err
}
state, err := t.client.Step()
state, err := exitedToError(t.client.Step())
if err != nil {
printfileNoState(t)
return err
@ -800,7 +807,7 @@ func stepInstruction(t *Term, ctx callContext, args string) error {
if err := scopePrefixSwitch(t, ctx); err != nil {
return err
}
state, err := t.client.StepInstruction()
state, err := exitedToError(t.client.StepInstruction())
if err != nil {
printfileNoState(t)
return err
@ -814,7 +821,7 @@ func next(t *Term, ctx callContext, args string) error {
if err := scopePrefixSwitch(t, ctx); err != nil {
return err
}
state, err := t.client.Next()
state, err := exitedToError(t.client.Next())
if err != nil {
printfileNoState(t)
return err
@ -827,7 +834,7 @@ func stepout(t *Term, ctx callContext, args string) error {
if err := scopePrefixSwitch(t, ctx); err != nil {
return err
}
state, err := t.client.StepOut()
state, err := exitedToError(t.client.StepOut())
if err != nil {
printfileNoState(t)
return err

@ -717,3 +717,18 @@ func TestDisassembleAutogenerated(t *testing.T) {
}
})
}
func TestIssue1090(t *testing.T) {
// Exit while executing 'next' should report the "Process exited" error
// message instead of crashing.
withTestTerminal("math", t, func(term *FakeTerminal) {
term.MustExec("break main.main")
term.MustExec("continue")
for {
_, err := term.Exec("next")
if err != nil && strings.Contains(err.Error(), " has exited with status ") {
break
}
}
})
}