parent
74d330a013
commit
045763ef04
@ -783,11 +783,18 @@ func scopePrefixSwitch(t *Term, ctx callContext) error {
|
|||||||
return nil
|
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 {
|
func step(t *Term, ctx callContext, args string) error {
|
||||||
if err := scopePrefixSwitch(t, ctx); err != nil {
|
if err := scopePrefixSwitch(t, ctx); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
state, err := t.client.Step()
|
state, err := exitedToError(t.client.Step())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
printfileNoState(t)
|
printfileNoState(t)
|
||||||
return err
|
return err
|
||||||
@ -800,7 +807,7 @@ func stepInstruction(t *Term, ctx callContext, args string) error {
|
|||||||
if err := scopePrefixSwitch(t, ctx); err != nil {
|
if err := scopePrefixSwitch(t, ctx); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
state, err := t.client.StepInstruction()
|
state, err := exitedToError(t.client.StepInstruction())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
printfileNoState(t)
|
printfileNoState(t)
|
||||||
return err
|
return err
|
||||||
@ -814,7 +821,7 @@ func next(t *Term, ctx callContext, args string) error {
|
|||||||
if err := scopePrefixSwitch(t, ctx); err != nil {
|
if err := scopePrefixSwitch(t, ctx); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
state, err := t.client.Next()
|
state, err := exitedToError(t.client.Next())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
printfileNoState(t)
|
printfileNoState(t)
|
||||||
return err
|
return err
|
||||||
@ -827,7 +834,7 @@ func stepout(t *Term, ctx callContext, args string) error {
|
|||||||
if err := scopePrefixSwitch(t, ctx); err != nil {
|
if err := scopePrefixSwitch(t, ctx); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
state, err := t.client.StepOut()
|
state, err := exitedToError(t.client.StepOut())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
printfileNoState(t)
|
printfileNoState(t)
|
||||||
return err
|
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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user