mirror of
https://github.com/go-delve/delve.git
synced 2025-11-02 04:36:29 +08:00
Introduce JSON-RPC service
This commit is contained in:
@ -12,7 +12,9 @@ import (
|
||||
|
||||
sys "golang.org/x/sys/unix"
|
||||
|
||||
"github.com/derekparker/delve/service"
|
||||
"github.com/derekparker/delve/service/rest"
|
||||
"github.com/derekparker/delve/service/rpc"
|
||||
"github.com/derekparker/delve/terminal"
|
||||
)
|
||||
|
||||
@ -38,11 +40,13 @@ func main() {
|
||||
var addr string
|
||||
var logEnabled bool
|
||||
var headless bool
|
||||
var http bool
|
||||
|
||||
flag.BoolVar(&printv, "version", false, "Print version number and exit.")
|
||||
flag.StringVar(&addr, "addr", "localhost:0", "Debugging server listen address.")
|
||||
flag.BoolVar(&logEnabled, "log", false, "Enable debugging server logging.")
|
||||
flag.BoolVar(&headless, "headless", false, "Run in headless mode.")
|
||||
flag.BoolVar(&http, "http", false, "Start HTTP server instead of RPC.")
|
||||
flag.Parse()
|
||||
|
||||
if flag.NFlag() == 0 && len(flag.Args()) == 0 {
|
||||
@ -60,12 +64,12 @@ func main() {
|
||||
os.Exit(0)
|
||||
}
|
||||
|
||||
status := run(addr, logEnabled, headless)
|
||||
status := run(addr, logEnabled, headless, http)
|
||||
fmt.Println("[Hope I was of service hunting your bug!]")
|
||||
os.Exit(status)
|
||||
}
|
||||
|
||||
func run(addr string, logEnabled, headless bool) int {
|
||||
func run(addr string, logEnabled, headless, http bool) int {
|
||||
// Collect launch arguments
|
||||
var processArgs []string
|
||||
var attachPid int
|
||||
@ -121,18 +125,32 @@ func run(addr string, logEnabled, headless bool) int {
|
||||
return 1
|
||||
}
|
||||
|
||||
// Create and start a REST debugger server
|
||||
server := rest.NewServer(&rest.Config{
|
||||
Listener: listener,
|
||||
ProcessArgs: processArgs,
|
||||
AttachPid: attachPid,
|
||||
}, logEnabled)
|
||||
// Create and start a debugger server
|
||||
var server service.Server
|
||||
if http {
|
||||
server = rest.NewServer(&service.Config{
|
||||
Listener: listener,
|
||||
ProcessArgs: processArgs,
|
||||
AttachPid: attachPid,
|
||||
}, logEnabled)
|
||||
} else {
|
||||
server = rpc.NewServer(&service.Config{
|
||||
Listener: listener,
|
||||
ProcessArgs: processArgs,
|
||||
AttachPid: attachPid,
|
||||
}, logEnabled)
|
||||
}
|
||||
go server.Run()
|
||||
|
||||
var status int
|
||||
if !headless {
|
||||
// Create and start a terminal
|
||||
client := rest.NewClient(listener.Addr().String())
|
||||
var client service.Client
|
||||
if http {
|
||||
client = rest.NewClient(listener.Addr().String())
|
||||
} else {
|
||||
client = rpc.NewClient(listener.Addr().String())
|
||||
}
|
||||
term := terminal.New(client)
|
||||
err, status = term.Run()
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user