Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
HugeYuan
delve
提交
a3700a44
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,体验更适合开发者的 AI 搜索 >>
提交
a3700a44
编写于
10月 25, 2014
作者:
D
Derek Parker
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Improve support for int variable evaluation
上级
08aec0d5
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
29 addition
and
14 deletion
+29
-14
_fixtures/testvariables.go
_fixtures/testvariables.go
+10
-8
proctl/variables_linux_amd64.go
proctl/variables_linux_amd64.go
+16
-5
proctl/variables_test.go
proctl/variables_test.go
+3
-1
未找到文件。
_fixtures/testvariables.go
浏览文件 @
a3700a44
...
...
@@ -9,16 +9,18 @@ type FooBar struct {
func
foobar
(
baz
string
)
{
var
(
a1
=
"foo"
a2
=
6
a3
=
7.23
a4
=
[
2
]
int
{
1
,
2
}
a5
=
[]
int
{
1
,
2
,
3
,
4
,
5
}
a6
=
FooBar
{
Baz
:
8
,
Bur
:
"word"
}
a7
=
&
FooBar
{
Baz
:
5
,
Bur
:
"strum"
}
a1
=
"foo"
a2
=
6
a3
=
7.23
a4
=
[
2
]
int
{
1
,
2
}
a5
=
[]
int
{
1
,
2
,
3
,
4
,
5
}
a6
=
FooBar
{
Baz
:
8
,
Bur
:
"word"
}
a7
=
&
FooBar
{
Baz
:
5
,
Bur
:
"strum"
}
neg
=
-
1
i8
=
int8
(
1
)
)
fmt
.
Println
(
a1
,
a2
,
a3
,
a4
,
a5
,
a6
,
a7
,
baz
)
fmt
.
Println
(
a1
,
a2
,
a3
,
a4
,
a5
,
a6
,
a7
,
baz
,
neg
,
i8
)
}
func
main
()
{
...
...
proctl/variables_linux_amd64.go
浏览文件 @
a3700a44
...
...
@@ -139,7 +139,7 @@ func (thread *ThreadContext) extractValue(instructions []byte, off int64, typ in
case
*
dwarf
.
ArrayType
:
return
thread
.
readIntArray
(
offaddr
,
t
)
case
*
dwarf
.
IntType
:
return
thread
.
readInt
(
offaddr
)
return
thread
.
readInt
(
offaddr
,
t
.
ByteSize
)
case
*
dwarf
.
FloatType
:
return
thread
.
readFloat64
(
offaddr
)
}
...
...
@@ -225,15 +225,26 @@ func (thread *ThreadContext) readIntArray(addr uintptr, t *dwarf.ArrayType) (str
return
str
,
nil
}
func
(
thread
*
ThreadContext
)
readInt
(
addr
uintptr
)
(
string
,
error
)
{
val
,
err
:=
thread
.
readMemory
(
addr
,
8
)
func
(
thread
*
ThreadContext
)
readInt
(
addr
uintptr
,
size
int64
)
(
string
,
error
)
{
var
n
int
val
,
err
:=
thread
.
readMemory
(
addr
,
uintptr
(
size
))
if
err
!=
nil
{
return
""
,
err
}
n
:=
binary
.
LittleEndian
.
Uint64
(
val
)
switch
size
{
case
1
:
n
=
int
(
val
[
0
])
case
2
:
n
=
int
(
binary
.
LittleEndian
.
Uint16
(
val
))
case
4
:
n
=
int
(
binary
.
LittleEndian
.
Uint32
(
val
))
case
8
:
n
=
int
(
binary
.
LittleEndian
.
Uint64
(
val
))
}
return
strconv
.
Itoa
(
int
(
n
)
),
nil
return
strconv
.
Itoa
(
n
),
nil
}
func
(
thread
*
ThreadContext
)
readFloat64
(
addr
uintptr
)
(
string
,
error
)
{
...
...
proctl/variables_test.go
浏览文件 @
a3700a44
...
...
@@ -29,10 +29,12 @@ func TestVariableEvaluation(t *testing.T) {
{
"a6"
,
"main.FooBar {Baz: 8, Bur: word}"
,
"main.FooBar"
},
{
"a7"
,
"*main.FooBar {Baz: 5, Bur: strum}"
,
"*main.FooBar"
},
{
"baz"
,
"bazburzum"
,
"struct string"
},
{
"neg"
,
"-1"
,
"int"
},
{
"i8"
,
"1"
,
"int8"
},
}
helper
.
WithTestProcess
(
executablePath
,
t
,
func
(
p
*
proctl
.
DebuggedProcess
)
{
pc
,
_
,
_
:=
p
.
GoSymTable
.
LineToPC
(
fp
,
2
1
)
pc
,
_
,
_
:=
p
.
GoSymTable
.
LineToPC
(
fp
,
2
3
)
_
,
err
:=
p
.
Break
(
uintptr
(
pc
))
assertNoError
(
err
,
t
,
"Break() returned an error"
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录