mirror of
https://github.com/go-delve/delve.git
synced 2025-10-30 10:17:03 +08:00
Cleanup dwarf/frame tests
This commit is contained in:
@ -1,67 +0,0 @@
|
||||
package dwarfhelper
|
||||
|
||||
import (
|
||||
"debug/elf"
|
||||
"debug/gosym"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func GosymData(testfile string, t testing.TB) *gosym.Table {
|
||||
f, err := os.Open(testfile)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
e, err := elf.NewFile(f)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
return parseGoSym(t, e)
|
||||
}
|
||||
|
||||
func GrabDebugFrameSection(fp string, t testing.TB) []byte {
|
||||
p, err := filepath.Abs(fp)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
f, err := os.Open(p)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
ef, err := elf.NewFile(f)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
data, err := ef.Section(".debug_frame").Data()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
return data
|
||||
}
|
||||
|
||||
func parseGoSym(t testing.TB, exe *elf.File) *gosym.Table {
|
||||
symdat, err := exe.Section(".gosymtab").Data()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
pclndat, err := exe.Section(".gopclntab").Data()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
pcln := gosym.NewLineTable(pclndat, exe.Section(".text").Addr)
|
||||
tab, err := gosym.NewTable(symdat, pcln)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
return tab
|
||||
}
|
||||
@ -1,12 +1,72 @@
|
||||
package frame
|
||||
|
||||
import (
|
||||
"debug/elf"
|
||||
"debug/gosym"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
|
||||
"github.com/derekparker/dbg/dwarf/_helper"
|
||||
)
|
||||
|
||||
func gosymData(testfile string, t testing.TB) *gosym.Table {
|
||||
f, err := os.Open(testfile)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
e, err := elf.NewFile(f)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
return parseGoSym(t, e)
|
||||
}
|
||||
|
||||
func grabDebugFrameSection(fp string, t testing.TB) []byte {
|
||||
p, err := filepath.Abs(fp)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
f, err := os.Open(p)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
ef, err := elf.NewFile(f)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
data, err := ef.Section(".debug_frame").Data()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
return data
|
||||
}
|
||||
|
||||
func parseGoSym(t testing.TB, exe *elf.File) *gosym.Table {
|
||||
symdat, err := exe.Section(".gosymtab").Data()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
pclndat, err := exe.Section(".gopclntab").Data()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
pcln := gosym.NewLineTable(pclndat, exe.Section(".text").Addr)
|
||||
tab, err := gosym.NewTable(symdat, pcln)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
return tab
|
||||
}
|
||||
|
||||
func TestFDEForPC(t *testing.T) {
|
||||
fde1 := &FrameDescriptionEntry{AddressRange: &addrange{begin: 100, end: 200}}
|
||||
fde2 := &FrameDescriptionEntry{AddressRange: &addrange{begin: 50, end: 99}}
|
||||
@ -30,16 +90,20 @@ func TestFDEForPC(t *testing.T) {
|
||||
}
|
||||
|
||||
func BenchmarkFDEForPC(b *testing.B) {
|
||||
var (
|
||||
testfile, _ = filepath.Abs("../../_fixtures/testnextprog")
|
||||
dbframe = dwarfhelper.GrabDebugFrameSection(testfile, b)
|
||||
fdes = Parse(dbframe)
|
||||
gsd = dwarfhelper.GosymData(testfile, b)
|
||||
)
|
||||
f, err := os.Open("testdata/frame")
|
||||
if err != nil {
|
||||
b.Fatal(err)
|
||||
}
|
||||
defer f.Close()
|
||||
|
||||
pc, _, _ := gsd.LineToPC("/usr/local/go/src/pkg/runtime/memmove_amd64.s", 33)
|
||||
data, err := ioutil.ReadAll(f)
|
||||
if err != nil {
|
||||
b.Fatal(err)
|
||||
}
|
||||
fdes := Parse(data)
|
||||
|
||||
for i := 0; i < b.N; i++ {
|
||||
_, _ = fdes.FDEForPC(pc)
|
||||
// bench worst case, exhaustive search
|
||||
_, _ = fdes.FDEForPC(0x455555555)
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,16 +1,26 @@
|
||||
package frame_test
|
||||
|
||||
import (
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
"github.com/davecheney/profile"
|
||||
"github.com/derekparker/dbg/dwarf/_helper"
|
||||
"github.com/derekparker/dbg/dwarf/frame"
|
||||
)
|
||||
|
||||
func BenchmarkParse(b *testing.B) {
|
||||
defer profile.Start(profile.CPUProfile).Stop()
|
||||
data := dwarfhelper.GrabDebugFrameSection("../../_fixtures/testprog", nil)
|
||||
f, err := os.Open("testdata/frame")
|
||||
if err != nil {
|
||||
b.Fatal(err)
|
||||
}
|
||||
defer f.Close()
|
||||
|
||||
data, err := ioutil.ReadAll(f)
|
||||
if err != nil {
|
||||
b.Fatal(err)
|
||||
}
|
||||
|
||||
b.ResetTimer()
|
||||
for i := 0; i < b.N; i++ {
|
||||
|
||||
BIN
dwarf/frame/testdata/frame
vendored
Normal file
BIN
dwarf/frame/testdata/frame
vendored
Normal file
Binary file not shown.
Reference in New Issue
Block a user