parent
b94e2bd0ec
commit
fb7210934d
@ -14,6 +14,10 @@ import (
|
|||||||
"github.com/derekparker/delve/service/debugger"
|
"github.com/derekparker/delve/service/debugger"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type ServerImpl struct {
|
||||||
|
s *RPCServer
|
||||||
|
}
|
||||||
|
|
||||||
type RPCServer struct {
|
type RPCServer struct {
|
||||||
// config is all the information necessary to start the debugger and server.
|
// config is all the information necessary to start the debugger and server.
|
||||||
config *service.Config
|
config *service.Config
|
||||||
@ -24,44 +28,46 @@ type RPCServer struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewServer creates a new RPCServer.
|
// NewServer creates a new RPCServer.
|
||||||
func NewServer(config *service.Config, logEnabled bool) *RPCServer {
|
func NewServer(config *service.Config, logEnabled bool) *ServerImpl {
|
||||||
log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile)
|
log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile)
|
||||||
if !logEnabled {
|
if !logEnabled {
|
||||||
log.SetOutput(ioutil.Discard)
|
log.SetOutput(ioutil.Discard)
|
||||||
}
|
}
|
||||||
|
|
||||||
return &RPCServer{
|
return &ServerImpl{
|
||||||
config: config,
|
&RPCServer{
|
||||||
listener: config.Listener,
|
config: config,
|
||||||
|
listener: config.Listener,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Stop detaches from the debugger and waits for it to stop.
|
// Stop detaches from the debugger and waits for it to stop.
|
||||||
func (s *RPCServer) Stop(kill bool) error {
|
func (s *ServerImpl) Stop(kill bool) error {
|
||||||
return s.debugger.Detach(kill)
|
return s.s.debugger.Detach(kill)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Run starts a debugger and exposes it with an HTTP server. The debugger
|
// Run starts a debugger and exposes it with an HTTP server. The debugger
|
||||||
// itself can be stopped with the `detach` API. Run blocks until the HTTP
|
// itself can be stopped with the `detach` API. Run blocks until the HTTP
|
||||||
// server stops.
|
// server stops.
|
||||||
func (s *RPCServer) Run() error {
|
func (s *ServerImpl) Run() error {
|
||||||
var err error
|
var err error
|
||||||
// Create and start the debugger
|
// Create and start the debugger
|
||||||
if s.debugger, err = debugger.New(&debugger.Config{
|
if s.s.debugger, err = debugger.New(&debugger.Config{
|
||||||
ProcessArgs: s.config.ProcessArgs,
|
ProcessArgs: s.s.config.ProcessArgs,
|
||||||
AttachPid: s.config.AttachPid,
|
AttachPid: s.s.config.AttachPid,
|
||||||
}); err != nil {
|
}); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
c, err := s.listener.Accept()
|
c, err := s.s.listener.Accept()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
rpcs := grpc.NewServer()
|
rpcs := grpc.NewServer()
|
||||||
rpcs.Register(s)
|
rpcs.Register(s.s)
|
||||||
rpcs.ServeCodec(jsonrpc.NewServerCodec(c))
|
rpcs.ServeCodec(jsonrpc.NewServerCodec(c))
|
||||||
}()
|
}()
|
||||||
return nil
|
return nil
|
||||||
@ -76,6 +82,10 @@ func (s *RPCServer) Detach(kill bool, ret *int) error {
|
|||||||
return s.debugger.Detach(kill)
|
return s.debugger.Detach(kill)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *ServerImpl) Restart() error {
|
||||||
|
return s.s.Restart(nil, nil)
|
||||||
|
}
|
||||||
|
|
||||||
func (s *RPCServer) Restart(arg1 interface{}, arg2 *int) error {
|
func (s *RPCServer) Restart(arg1 interface{}, arg2 *int) error {
|
||||||
if s.config.AttachPid != 0 {
|
if s.config.AttachPid != 0 {
|
||||||
return errors.New("cannot restart process Delve did not create")
|
return errors.New("cannot restart process Delve did not create")
|
||||||
|
@ -122,7 +122,7 @@ func TestRestart_attachPid(t *testing.T) {
|
|||||||
Listener: nil,
|
Listener: nil,
|
||||||
AttachPid: 999,
|
AttachPid: 999,
|
||||||
}, false)
|
}, false)
|
||||||
if err := server.Restart(nil, nil); err == nil {
|
if err := server.Restart(); err == nil {
|
||||||
t.Fatal("expected error on restart after attaching to pid but got none")
|
t.Fatal("expected error on restart after attaching to pid but got none")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user