Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
HugeYuan
delve
提交
eae4e99f
D
delve
项目概览
HugeYuan
/
delve
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
delve
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
eae4e99f
编写于
9月 18, 2014
作者:
D
Derek Parker
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Cleanup dwarf/frame tests
上级
8ee9525f
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
86 addition
and
79 deletion
+86
-79
dwarf/_helper/helper.go
dwarf/_helper/helper.go
+0
-67
dwarf/frame/frame_entries_test.go
dwarf/frame/frame_entries_test.go
+74
-10
dwarf/frame/frame_parser_test.go
dwarf/frame/frame_parser_test.go
+12
-2
dwarf/frame/testdata/frame
dwarf/frame/testdata/frame
+0
-0
未找到文件。
dwarf/_helper/helper.go
已删除
100644 → 0
浏览文件 @
8ee9525f
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
}
dwarf/frame/frame_entries_test.go
浏览文件 @
eae4e99f
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
)
}
}
dwarf/frame/frame_parser_test.go
浏览文件 @
eae4e99f
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
++
{
...
...
dwarf/frame/testdata/frame
0 → 100644
浏览文件 @
eae4e99f
文件已添加
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录