| 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) |
| } |
| } |