proc: fix panic when calling Ancestors on a parked goroutine (#1570)
Fixes #1568
This commit is contained in:
parent
21ac0eb4f8
commit
2d6d016bf1
@ -4280,7 +4280,7 @@ func TestAncestors(t *testing.T) {
|
|||||||
_, err := setFunctionBreakpoint(p, "main.testgoroutine")
|
_, err := setFunctionBreakpoint(p, "main.testgoroutine")
|
||||||
assertNoError(err, t, "setFunctionBreakpoint()")
|
assertNoError(err, t, "setFunctionBreakpoint()")
|
||||||
assertNoError(proc.Continue(p), t, "Continue()")
|
assertNoError(proc.Continue(p), t, "Continue()")
|
||||||
as, err := p.SelectedGoroutine().Ancestors(1000)
|
as, err := proc.Ancestors(p, p.SelectedGoroutine(), 1000)
|
||||||
assertNoError(err, t, "Ancestors")
|
assertNoError(err, t, "Ancestors")
|
||||||
t.Logf("ancestors: %#v\n", as)
|
t.Logf("ancestors: %#v\n", as)
|
||||||
if len(as) != 1 {
|
if len(as) != 1 {
|
||||||
|
@ -659,8 +659,8 @@ func (g *G) StartLoc() Location {
|
|||||||
var errTracebackAncestorsDisabled = errors.New("tracebackancestors is disabled")
|
var errTracebackAncestorsDisabled = errors.New("tracebackancestors is disabled")
|
||||||
|
|
||||||
// Ancestors returns the list of ancestors for g.
|
// Ancestors returns the list of ancestors for g.
|
||||||
func (g *G) Ancestors(n int) ([]Ancestor, error) {
|
func Ancestors(p Process, g *G, n int) ([]Ancestor, error) {
|
||||||
scope := globalScope(g.Thread.BinInfo(), g.Thread.BinInfo().Images[0], g.Thread)
|
scope := globalScope(p.BinInfo(), p.BinInfo().Images[0], p.CurrentThread())
|
||||||
tbav, err := scope.EvalExpression("runtime.debug.tracebackancestors", loadSingleValue)
|
tbav, err := scope.EvalExpression("runtime.debug.tracebackancestors", loadSingleValue)
|
||||||
if err == nil && tbav.Unreadable == nil && tbav.Kind == reflect.Int {
|
if err == nil && tbav.Unreadable == nil && tbav.Kind == reflect.Int {
|
||||||
tba, _ := constant.Int64Val(tbav.Value)
|
tba, _ := constant.Int64Val(tbav.Value)
|
||||||
|
@ -991,7 +991,7 @@ func (d *Debugger) Ancestors(goroutineID, numAncestors, depth int) ([]api.Ancest
|
|||||||
return nil, errors.New("no selected goroutine")
|
return nil, errors.New("no selected goroutine")
|
||||||
}
|
}
|
||||||
|
|
||||||
ancestors, err := g.Ancestors(numAncestors)
|
ancestors, err := proc.Ancestors(d.target, g, numAncestors)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user