// PackageVariables returns the name, value, and type of all package variables in the application. func (scope *EvalScope) PackageVariables(cfg LoadConfig) ([]*Variable, error) { var vars []*Variable reader := scope.DwarfReader() var utypoff dwarf.Offset utypentry, err := reader.SeekToTypeNamed("<unspecified>") if err == nil { utypoff = utypentry.Offset } for entry, err := reader.NextPackageVariable(); entry != nil; entry, err = reader.NextPackageVariable() { if err != nil { return nil, err } if typoff, ok := entry.Val(dwarf.AttrType).(dwarf.Offset); !ok || typoff == utypoff { continue } // Ignore errors trying to extract values val, err := scope.extractVariableFromEntry(entry, cfg) if err != nil { continue } vars = append(vars, val) } return vars, nil }
func (scope *EvalScope) packageVarAddr(name string) (*Variable, error) { reader := scope.DwarfReader() for entry, err := reader.NextPackageVariable(); entry != nil; entry, err = reader.NextPackageVariable() { if err != nil { return nil, err } n, ok := entry.Val(dwarf.AttrName).(string) if !ok { continue } if n == name { return scope.extractVarInfoFromEntry(entry, reader) } } return nil, fmt.Errorf("could not find symbol value for %s", name) }
// PackageVariables returns the name, value, and type of all package variables in the application. func (scope *EvalScope) PackageVariables() ([]*Variable, error) { var vars []*Variable reader := scope.DwarfReader() for entry, err := reader.NextPackageVariable(); entry != nil; entry, err = reader.NextPackageVariable() { if err != nil { return nil, err } // Ignore errors trying to extract values val, err := scope.extractVariableFromEntry(entry) if err != nil { continue } vars = append(vars, val) } return vars, nil }
func (thread *Thread) EvalPackageVariable(name string) (*Variable, error) { reader := thread.dbp.DwarfReader() for entry, err := reader.NextPackageVariable(); entry != nil; entry, err = reader.NextPackageVariable() { if err != nil { return nil, err } n, ok := entry.Val(dwarf.AttrName).(string) if !ok { continue } if n == name { return thread.extractVariableFromEntry(entry) } } return nil, fmt.Errorf("could not find symbol value for %s", name) }
// PackageVariables returns the name, value, and type of all package variables in the application. func (thread *Thread) PackageVariables() ([]*Variable, error) { reader := thread.dbp.DwarfReader() vars := make([]*Variable, 0) for entry, err := reader.NextPackageVariable(); entry != nil; entry, err = reader.NextPackageVariable() { if err != nil { return nil, err } // Ignore errors trying to extract values val, err := thread.extractVariableFromEntry(entry) if err != nil { continue } vars = append(vars, val) } return vars, nil }
func (dbp *Process) EvalPackageVariable(name string) (*Variable, error) { reader := dbp.DwarfReader() scope := &EvalScope{Thread: dbp.CurrentThread, PC: 0, CFA: 0} for entry, err := reader.NextPackageVariable(); entry != nil; entry, err = reader.NextPackageVariable() { if err != nil { return nil, err } n, ok := entry.Val(dwarf.AttrName).(string) if !ok { continue } if n == name { return scope.extractVariableFromEntry(entry) } } return nil, fmt.Errorf("could not find symbol value for %s", name) }