parent
80107dba8d
commit
e0519dd540
@ -295,19 +295,15 @@ func parseG(thread *Thread, gaddr uint64, deref bool) (*G, error) {
|
|||||||
|
|
||||||
// Returns information for the named variable.
|
// Returns information for the named variable.
|
||||||
func (scope *EvalScope) ExtractVariableInfo(name string) (*Variable, error) {
|
func (scope *EvalScope) ExtractVariableInfo(name string) (*Variable, error) {
|
||||||
varName := name
|
parts := strings.Split(name, ".")
|
||||||
memberName := ""
|
varName := parts[0]
|
||||||
if strings.Contains(name, ".") {
|
memberNames := parts[1:]
|
||||||
idx := strings.Index(name, ".")
|
|
||||||
varName = name[:idx]
|
|
||||||
memberName = name[idx+1:]
|
|
||||||
}
|
|
||||||
|
|
||||||
v, err := scope.extractVarInfo(varName)
|
v, err := scope.extractVarInfo(varName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
origErr := err
|
origErr := err
|
||||||
// Attempt to evaluate name as a package variable.
|
// Attempt to evaluate name as a package variable.
|
||||||
if memberName != "" {
|
if len(memberNames) > 0 {
|
||||||
v, err = scope.packageVarAddr(name)
|
v, err = scope.packageVarAddr(name)
|
||||||
} else {
|
} else {
|
||||||
_, _, fn := scope.Thread.dbp.PCToLine(scope.PC)
|
_, _, fn := scope.Thread.dbp.PCToLine(scope.PC)
|
||||||
@ -320,7 +316,7 @@ func (scope *EvalScope) ExtractVariableInfo(name string) (*Variable, error) {
|
|||||||
}
|
}
|
||||||
v.Name = name
|
v.Name = name
|
||||||
} else {
|
} else {
|
||||||
if len(memberName) > 0 {
|
for _, memberName := range memberNames {
|
||||||
v, err = v.structMember(memberName)
|
v, err = v.structMember(memberName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -97,6 +97,9 @@ func TestVariableEvaluation(t *testing.T) {
|
|||||||
{"f", "main.barfoo", "", "func()", nil},
|
{"f", "main.barfoo", "", "func()", nil},
|
||||||
{"ba", "[]int len: 200, cap: 200, [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,...+136 more]", "", "struct []int", nil},
|
{"ba", "[]int len: 200, cap: 200, [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,...+136 more]", "", "struct []int", nil},
|
||||||
{"ms", "main.Nest {Level: 0, Nest: *main.Nest {Level: 1, Nest: *main.Nest {...}}}", "", "main.Nest", nil},
|
{"ms", "main.Nest {Level: 0, Nest: *main.Nest {Level: 1, Nest: *main.Nest {...}}}", "", "main.Nest", nil},
|
||||||
|
{"ms.Nest.Nest", "*main.Nest {Level: 2, Nest: *main.Nest {Level: 3, Nest: *main.Nest {...}}}", "", "*main.Nest", nil},
|
||||||
|
{"ms.Nest.Nest.Nest.Nest.Nest", "*main.Nest nil", "", "*main.Nest", nil},
|
||||||
|
{"ms.Nest.Nest.Nest.Nest.Nest.Nest", "", "", "*main.Nest", fmt.Errorf("ms.Nest.Nest.Nest.Nest.Nest is nil")},
|
||||||
{"main.p1", "10", "12", "int", nil},
|
{"main.p1", "10", "12", "int", nil},
|
||||||
{"p1", "10", "13", "int", nil},
|
{"p1", "10", "13", "int", nil},
|
||||||
{"NonExistent", "", "", "", fmt.Errorf("could not find symbol value for NonExistent")},
|
{"NonExistent", "", "", "", fmt.Errorf("could not find symbol value for NonExistent")},
|
||||||
|
Loading…
Reference in New Issue
Block a user