提交 14a92352 编写于 作者: A aarzilli 提交者: Derek Parker

proc: Add filter for non-variable global symbols to PackageVariables

上级 58913527
...@@ -1576,3 +1576,24 @@ func TestIssue414(t *testing.T) { ...@@ -1576,3 +1576,24 @@ func TestIssue414(t *testing.T) {
} }
}) })
} }
func TestPackageVariables(t *testing.T) {
withTestProcess("testvariables", t, func(p *Process, fixture protest.Fixture) {
err := p.Continue()
assertNoError(err, t, "Continue()")
scope, err := p.CurrentThread.Scope()
assertNoError(err, t, "Scope()")
vars, err := scope.PackageVariables()
assertNoError(err, t, "PackageVariables()")
failed := false
for _, v := range vars {
if v.Unreadable != nil {
failed = true
t.Logf("Unreadable variable %s: %v", v.Name, v.Unreadable)
}
}
if failed {
t.Fatalf("previous errors")
}
})
}
...@@ -541,11 +541,21 @@ func (scope *EvalScope) PackageVariables() ([]*Variable, error) { ...@@ -541,11 +541,21 @@ func (scope *EvalScope) PackageVariables() ([]*Variable, error) {
var vars []*Variable var vars []*Variable
reader := scope.DwarfReader() 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() { for entry, err := reader.NextPackageVariable(); entry != nil; entry, err = reader.NextPackageVariable() {
if err != nil { if err != nil {
return nil, err return nil, err
} }
if typoff, ok := entry.Val(dwarf.AttrType).(dwarf.Offset); !ok || typoff == utypoff {
continue
}
// Ignore errors trying to extract values // Ignore errors trying to extract values
val, err := scope.extractVariableFromEntry(entry) val, err := scope.extractVariableFromEntry(entry)
if err != nil { if err != nil {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册