main.go 1.3 KB
Newer Older
D
Derek Parker 已提交
1 2 3
package main

import (
4
	"flag"
D
Derek Parker 已提交
5 6
	"fmt"
	"os"
7
	"runtime"
D
Derek Parker 已提交
8

9
	"github.com/derekparker/delve/client/cli"
D
Derek Parker 已提交
10 11
)

D
Derek Parker 已提交
12
const version string = "0.5.0.beta"
D
Derek Parker 已提交
13

M
Matt Butcher 已提交
14
var usage string = `Delve version %s
D
Derek Parker 已提交
15 16

flags:
M
Matt Butcher 已提交
17
%s
D
Derek Parker 已提交
18 19 20

Invoke with the path to a binary:

D
Derek Parker 已提交
21
  dlv ./path/to/prog
D
Derek Parker 已提交
22 23 24

or use the following commands:
  run - Build, run, and attach to program
D
Derek Parker 已提交
25
  test - Build test binary, run and attach to it
D
Derek Parker 已提交
26
  attach - Attach to running process
M
Matt Butcher 已提交
27
`
D
Derek Parker 已提交
28

D
Derek Parker 已提交
29
func init() {
M
Matt Butcher 已提交
30 31
	flag.Usage = help

32 33
	// We must ensure here that we are running on the same thread during
	// the execution of dbg. This is due to the fact that ptrace(2) expects
D
Derek Parker 已提交
34
	// all commands after PTRACE_ATTACH to come from the same thread.
35
	runtime.LockOSThread()
D
Derek Parker 已提交
36
}
37

D
Derek Parker 已提交
38
func main() {
M
Matt Butcher 已提交
39
	var printv, printhelp bool
D
Derek Parker 已提交
40

D
Derek Parker 已提交
41
	flag.BoolVar(&printv, "v", false, "Print version number and exit.")
M
Matt Butcher 已提交
42
	flag.BoolVar(&printhelp, "h", false, "Print help text and exit.")
43
	flag.Parse()
D
Derek Parker 已提交
44

45
	if flag.NFlag() == 0 && len(flag.Args()) == 0 {
M
Matt Butcher 已提交
46
		help()
47
		os.Exit(0)
D
Derek Parker 已提交
48 49
	}

D
Derek Parker 已提交
50 51 52 53 54
	if printv {
		fmt.Printf("Delve version: %s\n", version)
		os.Exit(0)
	}

M
Matt Butcher 已提交
55 56 57 58 59
	if printhelp {
		help()
		os.Exit(0)
	}

D
Derek Parker 已提交
60
	cli.Run(os.Args[1:])
D
Derek Parker 已提交
61
}
M
Matt Butcher 已提交
62 63 64 65 66 67 68 69 70 71

// help prints help text to os.Stderr.
func help() {
	flags := ""
	flag.VisitAll(func(f *flag.Flag) {
		doc := fmt.Sprintf("  -%s=%s: %s\n", f.Name, f.DefValue, f.Usage)
		flags += doc
	})
	fmt.Fprintf(os.Stderr, usage, version, flags)
}