mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
runtime: fix runtime-gdb script loading
runtime.rtype was a copy of reflect.rtype - update script to use that directly. Introduces a basic test which will skip on systems without appropriate GDB. Fixes #9326 Change-Id: I6ec74e947bd2e1295492ca34b3a8c1b49315a8cb Reviewed-on: https://go-review.googlesource.com/2821 Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
parent
7785be8f22
commit
a25af2e99e
2 changed files with 60 additions and 1 deletions
|
|
@ -202,7 +202,7 @@ def lookup_type(name):
|
||||||
except gdb.error:
|
except gdb.error:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
_rctp_type = gdb.lookup_type("struct runtime.rtype").pointer()
|
_rctp_type = gdb.lookup_type("struct reflect.rtype").pointer()
|
||||||
|
|
||||||
|
|
||||||
def iface_commontype(obj):
|
def iface_commontype(obj):
|
||||||
|
|
|
||||||
59
src/runtime/runtime-gdb_test.go
Normal file
59
src/runtime/runtime-gdb_test.go
Normal file
|
|
@ -0,0 +1,59 @@
|
||||||
|
package runtime_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io/ioutil"
|
||||||
|
"os"
|
||||||
|
"os/exec"
|
||||||
|
"path/filepath"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func checkGdbPython(t *testing.T) {
|
||||||
|
cmd := exec.Command("gdb", "-nx", "-q", "--batch", "-ex", "python import sys; print('golang gdb python support')")
|
||||||
|
out, err := cmd.CombinedOutput()
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
t.Skipf("skipping due to issue running gdb%v", err)
|
||||||
|
}
|
||||||
|
if string(out) != "golang gdb python support\n" {
|
||||||
|
t.Skipf("skipping due to lack of python gdb support: %s", out)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const helloSource = `
|
||||||
|
package main
|
||||||
|
import "fmt"
|
||||||
|
func main() {
|
||||||
|
fmt.Println("hi")
|
||||||
|
}
|
||||||
|
`
|
||||||
|
|
||||||
|
func TestGdbLoadRuntimeSupport(t *testing.T) {
|
||||||
|
|
||||||
|
checkGdbPython(t)
|
||||||
|
|
||||||
|
dir, err := ioutil.TempDir("", "go-build")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("failed to create temp directory: %v", err)
|
||||||
|
}
|
||||||
|
defer os.RemoveAll(dir)
|
||||||
|
|
||||||
|
src := filepath.Join(dir, "main.go")
|
||||||
|
err = ioutil.WriteFile(src, []byte(helloSource), 0644)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("failed to create file: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd := exec.Command("go", "build", "-o", "a.exe")
|
||||||
|
cmd.Dir = dir
|
||||||
|
out, err := cmd.CombinedOutput()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("building source %v\n%s", err, out)
|
||||||
|
}
|
||||||
|
|
||||||
|
got, _ := exec.Command("gdb", "-nx", "-q", "--batch", "-ex", "source runtime-gdb.py",
|
||||||
|
filepath.Join(dir, "a.exe")).CombinedOutput()
|
||||||
|
if string(got) != "Loading Go Runtime support.\n" {
|
||||||
|
t.Fatalf("%s", got)
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue