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