Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
HugeYuan
delve
提交
25783f23
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 搜索 >>
提交
25783f23
编写于
5月 20, 2014
作者:
D
Derek Parker
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Implement Continue() for linux amd64
上级
ea0ff20e
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
59 addition
and
14 deletion
+59
-14
proctl/proctl_linux_amd64.go
proctl/proctl_linux_amd64.go
+28
-10
proctl/proctl_test.go
proctl/proctl_test.go
+31
-4
未找到文件。
proctl/proctl_linux_amd64.go
浏览文件 @
25783f23
...
...
@@ -7,9 +7,10 @@ import (
)
type
DebuggedProcess
struct
{
Pid
int
Regs
*
syscall
.
PtraceRegs
Process
*
os
.
Process
Pid
int
Regs
*
syscall
.
PtraceRegs
Process
*
os
.
Process
ProcessState
*
os
.
ProcessState
}
func
NewDebugProcess
(
pid
int
)
(
*
DebuggedProcess
,
error
)
{
...
...
@@ -23,17 +24,18 @@ func NewDebugProcess(pid int) (*DebuggedProcess, error) {
return
nil
,
err
}
debuggedProc
:=
DebuggedProcess
{
Pid
:
pid
,
Regs
:
&
syscall
.
PtraceRegs
{},
Process
:
proc
,
}
_
,
err
=
proc
.
Wait
()
ps
,
err
:=
proc
.
Wait
()
if
err
!=
nil
{
return
nil
,
err
}
debuggedProc
:=
DebuggedProcess
{
Pid
:
pid
,
Regs
:
&
syscall
.
PtraceRegs
{},
Process
:
proc
,
ProcessState
:
ps
,
}
return
&
debuggedProc
,
nil
}
...
...
@@ -59,3 +61,19 @@ func (dbp *DebuggedProcess) Step() error {
return
nil
}
func
(
dbp
*
DebuggedProcess
)
Continue
()
error
{
err
:=
syscall
.
PtraceCont
(
dbp
.
Pid
,
0
)
if
err
!=
nil
{
return
err
}
ps
,
err
:=
dbp
.
Process
.
Wait
()
if
err
!=
nil
{
return
err
}
dbp
.
ProcessState
=
ps
return
nil
}
proctl/proctl_test.go
浏览文件 @
25783f23
...
...
@@ -5,23 +5,24 @@ import (
"testing"
)
func
StartTestProcess
()
(
int
,
error
)
{
func
StartTestProcess
()
(
*
exec
.
Cmd
,
error
)
{
cmd
:=
exec
.
Command
(
"../fixtures/testprog"
)
err
:=
cmd
.
Start
()
if
err
!=
nil
{
return
0
,
err
return
nil
,
err
}
return
cmd
.
Process
.
Pid
,
nil
return
cmd
,
nil
}
func
TestStep
(
t
*
testing
.
T
)
{
pi
d
,
err
:=
StartTestProcess
()
cm
d
,
err
:=
StartTestProcess
()
if
err
!=
nil
{
t
.
Fatal
(
"Starting test process:"
,
err
)
}
pid
:=
cmd
.
Process
.
Pid
p
,
err
:=
NewDebugProcess
(
pid
)
if
err
!=
nil
{
t
.
Fatal
(
"NewDebugProcess():"
,
err
)
...
...
@@ -48,3 +49,29 @@ func TestStep(t *testing.T) {
t
.
Errorf
(
"Expected %#v to be greater than %#v"
,
regs
.
PC
(),
rip
)
}
}
func
TestContinue
(
t
*
testing
.
T
)
{
cmd
,
err
:=
StartTestProcess
()
if
err
!=
nil
{
t
.
Fatal
(
"Starting test process:"
,
err
)
}
pid
:=
cmd
.
Process
.
Pid
p
,
err
:=
NewDebugProcess
(
pid
)
if
err
!=
nil
{
t
.
Fatal
(
"NewDebugProcess():"
,
err
)
}
if
p
.
ProcessState
.
Exited
()
{
t
.
Fatal
(
"Process already exited"
)
}
err
=
p
.
Continue
()
if
err
!=
nil
{
t
.
Fatal
(
"Continue():"
,
err
)
}
if
!
p
.
ProcessState
.
Exited
()
{
t
.
Fatal
(
"Process did not continue"
)
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录