From b35072f3dc1e2aabe1c8400e7e91cad1547b38fe Mon Sep 17 00:00:00 2001 From: Derek Parker Date: Tue, 20 May 2014 18:11:00 -0500 Subject: [PATCH] Respond to basic process commands --- main.go | 37 +++++++++++++++++++++++++++++++------ 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/main.go b/main.go index 71f09e24..bf8a88ad 100644 --- a/main.go +++ b/main.go @@ -4,9 +4,11 @@ import ( "bufio" "fmt" "os" + "strconv" "strings" "github.com/Dparker1990/dbg/command" + "github.com/Dparker1990/dbg/proctl" ) type term struct { @@ -14,16 +16,29 @@ type term struct { } func main() { - var ( - t = newTerm() - cmds = command.DebugCommands() - ) + t := newTerm() + + if len(os.Args) == 1 { + printStderrAndDie("You must provide a pid\n") + } + + pid, err := strconv.Atoi(os.Args[1]) + if err != nil { + printStderrAndDie(err) + } + + dbgproc, err := proctl.NewDebugProcess(pid) + if err != nil { + printStderrAndDie("Could not start debugging process:", err) + } + + cmds := command.DebugCommands() + registerProcessCommands(cmds, dbgproc) for { cmdstr, err := t.promptForInput() if err != nil { - fmt.Fprint(os.Stderr, "Prompt for input failed.") - os.Exit(1) + printStderrAndDie("Prompt for input failed.\n") } cmd := cmds.Find(cmdstr) @@ -34,6 +49,16 @@ func main() { } } +func printStderrAndDie(args ...interface{}) { + fmt.Fprint(os.Stderr, args) + os.Exit(1) +} + +func registerProcessCommands(cmds *command.Commands, proc *proctl.DebuggedProcess) { + cmds.Register("step", proc.Step) + cmds.Register("continue", proc.Continue) +} + func newTerm() *term { return &term{ stdin: bufio.NewReader(os.Stdin),