cmd/dlv: subcommand 'dlv test' should switch to package directory (#2128)
Match 'go test' behaviour and switch to package directory, unless one is specified with the '--wd' option. Fixes #2125
This commit is contained in:
parent
936c76b08c
commit
1ef8c40ccf
@ -31,7 +31,7 @@ Pass flags to the program you are debugging using `--`, for example:
|
|||||||
--log-dest string Writes logs to the specified file or file descriptor (see 'dlv help log').
|
--log-dest string Writes logs to the specified file or file descriptor (see 'dlv help log').
|
||||||
--log-output string Comma separated list of components that should produce debug output (see 'dlv help log')
|
--log-output string Comma separated list of components that should produce debug output (see 'dlv help log')
|
||||||
--only-same-user Only connections from the same user that started this instance of Delve are allowed to connect. (default true)
|
--only-same-user Only connections from the same user that started this instance of Delve are allowed to connect. (default true)
|
||||||
--wd string Working directory for running the program. (default ".")
|
--wd string Working directory for running the program.
|
||||||
```
|
```
|
||||||
|
|
||||||
### SEE ALSO
|
### SEE ALSO
|
||||||
|
@ -37,7 +37,7 @@ dlv attach pid [executable]
|
|||||||
--log-dest string Writes logs to the specified file or file descriptor (see 'dlv help log').
|
--log-dest string Writes logs to the specified file or file descriptor (see 'dlv help log').
|
||||||
--log-output string Comma separated list of components that should produce debug output (see 'dlv help log')
|
--log-output string Comma separated list of components that should produce debug output (see 'dlv help log')
|
||||||
--only-same-user Only connections from the same user that started this instance of Delve are allowed to connect. (default true)
|
--only-same-user Only connections from the same user that started this instance of Delve are allowed to connect. (default true)
|
||||||
--wd string Working directory for running the program. (default ".")
|
--wd string Working directory for running the program.
|
||||||
```
|
```
|
||||||
|
|
||||||
### SEE ALSO
|
### SEE ALSO
|
||||||
|
@ -30,7 +30,7 @@ are:
|
|||||||
--log-dest string Writes logs to the specified file or file descriptor (see 'dlv help log').
|
--log-dest string Writes logs to the specified file or file descriptor (see 'dlv help log').
|
||||||
--log-output string Comma separated list of components that should produce debug output (see 'dlv help log')
|
--log-output string Comma separated list of components that should produce debug output (see 'dlv help log')
|
||||||
--only-same-user Only connections from the same user that started this instance of Delve are allowed to connect. (default true)
|
--only-same-user Only connections from the same user that started this instance of Delve are allowed to connect. (default true)
|
||||||
--wd string Working directory for running the program. (default ".")
|
--wd string Working directory for running the program.
|
||||||
```
|
```
|
||||||
|
|
||||||
### SEE ALSO
|
### SEE ALSO
|
||||||
|
@ -26,7 +26,7 @@ dlv connect addr
|
|||||||
--log-dest string Writes logs to the specified file or file descriptor (see 'dlv help log').
|
--log-dest string Writes logs to the specified file or file descriptor (see 'dlv help log').
|
||||||
--log-output string Comma separated list of components that should produce debug output (see 'dlv help log')
|
--log-output string Comma separated list of components that should produce debug output (see 'dlv help log')
|
||||||
--only-same-user Only connections from the same user that started this instance of Delve are allowed to connect. (default true)
|
--only-same-user Only connections from the same user that started this instance of Delve are allowed to connect. (default true)
|
||||||
--wd string Working directory for running the program. (default ".")
|
--wd string Working directory for running the program.
|
||||||
```
|
```
|
||||||
|
|
||||||
### SEE ALSO
|
### SEE ALSO
|
||||||
|
@ -32,7 +32,7 @@ dlv core <executable> <core>
|
|||||||
--log-dest string Writes logs to the specified file or file descriptor (see 'dlv help log').
|
--log-dest string Writes logs to the specified file or file descriptor (see 'dlv help log').
|
||||||
--log-output string Comma separated list of components that should produce debug output (see 'dlv help log')
|
--log-output string Comma separated list of components that should produce debug output (see 'dlv help log')
|
||||||
--only-same-user Only connections from the same user that started this instance of Delve are allowed to connect. (default true)
|
--only-same-user Only connections from the same user that started this instance of Delve are allowed to connect. (default true)
|
||||||
--wd string Working directory for running the program. (default ".")
|
--wd string Working directory for running the program.
|
||||||
```
|
```
|
||||||
|
|
||||||
### SEE ALSO
|
### SEE ALSO
|
||||||
|
@ -33,7 +33,7 @@ dlv dap
|
|||||||
--log-dest string Writes logs to the specified file or file descriptor (see 'dlv help log').
|
--log-dest string Writes logs to the specified file or file descriptor (see 'dlv help log').
|
||||||
--log-output string Comma separated list of components that should produce debug output (see 'dlv help log')
|
--log-output string Comma separated list of components that should produce debug output (see 'dlv help log')
|
||||||
--only-same-user Only connections from the same user that started this instance of Delve are allowed to connect. (default true)
|
--only-same-user Only connections from the same user that started this instance of Delve are allowed to connect. (default true)
|
||||||
--wd string Working directory for running the program. (default ".")
|
--wd string Working directory for running the program.
|
||||||
```
|
```
|
||||||
|
|
||||||
### SEE ALSO
|
### SEE ALSO
|
||||||
|
@ -39,7 +39,7 @@ dlv debug [package]
|
|||||||
--log-dest string Writes logs to the specified file or file descriptor (see 'dlv help log').
|
--log-dest string Writes logs to the specified file or file descriptor (see 'dlv help log').
|
||||||
--log-output string Comma separated list of components that should produce debug output (see 'dlv help log')
|
--log-output string Comma separated list of components that should produce debug output (see 'dlv help log')
|
||||||
--only-same-user Only connections from the same user that started this instance of Delve are allowed to connect. (default true)
|
--only-same-user Only connections from the same user that started this instance of Delve are allowed to connect. (default true)
|
||||||
--wd string Working directory for running the program. (default ".")
|
--wd string Working directory for running the program.
|
||||||
```
|
```
|
||||||
|
|
||||||
### SEE ALSO
|
### SEE ALSO
|
||||||
|
@ -39,7 +39,7 @@ dlv exec <path/to/binary>
|
|||||||
--log-dest string Writes logs to the specified file or file descriptor (see 'dlv help log').
|
--log-dest string Writes logs to the specified file or file descriptor (see 'dlv help log').
|
||||||
--log-output string Comma separated list of components that should produce debug output (see 'dlv help log')
|
--log-output string Comma separated list of components that should produce debug output (see 'dlv help log')
|
||||||
--only-same-user Only connections from the same user that started this instance of Delve are allowed to connect. (default true)
|
--only-same-user Only connections from the same user that started this instance of Delve are allowed to connect. (default true)
|
||||||
--wd string Working directory for running the program. (default ".")
|
--wd string Working directory for running the program.
|
||||||
```
|
```
|
||||||
|
|
||||||
### SEE ALSO
|
### SEE ALSO
|
||||||
|
@ -45,7 +45,7 @@ and dap modes.
|
|||||||
--log-dest string Writes logs to the specified file or file descriptor (see 'dlv help log').
|
--log-dest string Writes logs to the specified file or file descriptor (see 'dlv help log').
|
||||||
--log-output string Comma separated list of components that should produce debug output (see 'dlv help log')
|
--log-output string Comma separated list of components that should produce debug output (see 'dlv help log')
|
||||||
--only-same-user Only connections from the same user that started this instance of Delve are allowed to connect. (default true)
|
--only-same-user Only connections from the same user that started this instance of Delve are allowed to connect. (default true)
|
||||||
--wd string Working directory for running the program. (default ".")
|
--wd string Working directory for running the program.
|
||||||
```
|
```
|
||||||
|
|
||||||
### SEE ALSO
|
### SEE ALSO
|
||||||
|
@ -30,7 +30,7 @@ dlv replay [trace directory]
|
|||||||
--log-dest string Writes logs to the specified file or file descriptor (see 'dlv help log').
|
--log-dest string Writes logs to the specified file or file descriptor (see 'dlv help log').
|
||||||
--log-output string Comma separated list of components that should produce debug output (see 'dlv help log')
|
--log-output string Comma separated list of components that should produce debug output (see 'dlv help log')
|
||||||
--only-same-user Only connections from the same user that started this instance of Delve are allowed to connect. (default true)
|
--only-same-user Only connections from the same user that started this instance of Delve are allowed to connect. (default true)
|
||||||
--wd string Working directory for running the program. (default ".")
|
--wd string Working directory for running the program.
|
||||||
```
|
```
|
||||||
|
|
||||||
### SEE ALSO
|
### SEE ALSO
|
||||||
|
@ -26,7 +26,7 @@ dlv run
|
|||||||
--log-dest string Writes logs to the specified file or file descriptor (see 'dlv help log').
|
--log-dest string Writes logs to the specified file or file descriptor (see 'dlv help log').
|
||||||
--log-output string Comma separated list of components that should produce debug output (see 'dlv help log')
|
--log-output string Comma separated list of components that should produce debug output (see 'dlv help log')
|
||||||
--only-same-user Only connections from the same user that started this instance of Delve are allowed to connect. (default true)
|
--only-same-user Only connections from the same user that started this instance of Delve are allowed to connect. (default true)
|
||||||
--wd string Working directory for running the program. (default ".")
|
--wd string Working directory for running the program.
|
||||||
```
|
```
|
||||||
|
|
||||||
### SEE ALSO
|
### SEE ALSO
|
||||||
|
@ -37,7 +37,7 @@ dlv test [package]
|
|||||||
--log-dest string Writes logs to the specified file or file descriptor (see 'dlv help log').
|
--log-dest string Writes logs to the specified file or file descriptor (see 'dlv help log').
|
||||||
--log-output string Comma separated list of components that should produce debug output (see 'dlv help log')
|
--log-output string Comma separated list of components that should produce debug output (see 'dlv help log')
|
||||||
--only-same-user Only connections from the same user that started this instance of Delve are allowed to connect. (default true)
|
--only-same-user Only connections from the same user that started this instance of Delve are allowed to connect. (default true)
|
||||||
--wd string Working directory for running the program. (default ".")
|
--wd string Working directory for running the program.
|
||||||
```
|
```
|
||||||
|
|
||||||
### SEE ALSO
|
### SEE ALSO
|
||||||
|
@ -44,7 +44,7 @@ dlv trace [package] regexp
|
|||||||
--log-dest string Writes logs to the specified file or file descriptor (see 'dlv help log').
|
--log-dest string Writes logs to the specified file or file descriptor (see 'dlv help log').
|
||||||
--log-output string Comma separated list of components that should produce debug output (see 'dlv help log')
|
--log-output string Comma separated list of components that should produce debug output (see 'dlv help log')
|
||||||
--only-same-user Only connections from the same user that started this instance of Delve are allowed to connect. (default true)
|
--only-same-user Only connections from the same user that started this instance of Delve are allowed to connect. (default true)
|
||||||
--wd string Working directory for running the program. (default ".")
|
--wd string Working directory for running the program.
|
||||||
```
|
```
|
||||||
|
|
||||||
### SEE ALSO
|
### SEE ALSO
|
||||||
|
@ -26,7 +26,7 @@ dlv version
|
|||||||
--log-dest string Writes logs to the specified file or file descriptor (see 'dlv help log').
|
--log-dest string Writes logs to the specified file or file descriptor (see 'dlv help log').
|
||||||
--log-output string Comma separated list of components that should produce debug output (see 'dlv help log')
|
--log-output string Comma separated list of components that should produce debug output (see 'dlv help log')
|
||||||
--only-same-user Only connections from the same user that started this instance of Delve are allowed to connect. (default true)
|
--only-same-user Only connections from the same user that started this instance of Delve are allowed to connect. (default true)
|
||||||
--wd string Working directory for running the program. (default ".")
|
--wd string Working directory for running the program.
|
||||||
```
|
```
|
||||||
|
|
||||||
### SEE ALSO
|
### SEE ALSO
|
||||||
|
@ -8,3 +8,8 @@ import (
|
|||||||
func TestMain(m *testing.M) {
|
func TestMain(m *testing.M) {
|
||||||
os.Exit(m.Run())
|
os.Exit(m.Run())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestCurrentDirectory(t *testing.T) {
|
||||||
|
wd, _ := os.Getwd()
|
||||||
|
t.Logf("current directory: %s", wd)
|
||||||
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package cmds
|
package cmds
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net"
|
"net"
|
||||||
@ -118,7 +119,7 @@ func New(docCall bool) *cobra.Command {
|
|||||||
rootCommand.PersistentFlags().IntVar(&apiVersion, "api-version", 1, "Selects API version when headless. New clients should use v2. Can be reset via RPCServer.SetApiVersion. See Documentation/api/json-rpc/README.md.")
|
rootCommand.PersistentFlags().IntVar(&apiVersion, "api-version", 1, "Selects API version when headless. New clients should use v2. Can be reset via RPCServer.SetApiVersion. See Documentation/api/json-rpc/README.md.")
|
||||||
rootCommand.PersistentFlags().StringVar(&initFile, "init", "", "Init file, executed by the terminal client.")
|
rootCommand.PersistentFlags().StringVar(&initFile, "init", "", "Init file, executed by the terminal client.")
|
||||||
rootCommand.PersistentFlags().StringVar(&buildFlags, "build-flags", buildFlagsDefault, "Build flags, to be passed to the compiler.")
|
rootCommand.PersistentFlags().StringVar(&buildFlags, "build-flags", buildFlagsDefault, "Build flags, to be passed to the compiler.")
|
||||||
rootCommand.PersistentFlags().StringVar(&workingDir, "wd", ".", "Working directory for running the program.")
|
rootCommand.PersistentFlags().StringVar(&workingDir, "wd", "", "Working directory for running the program.")
|
||||||
rootCommand.PersistentFlags().BoolVarP(&checkGoVersion, "check-go-version", "", true, "Checks that the version of Go in use is compatible with Delve.")
|
rootCommand.PersistentFlags().BoolVarP(&checkGoVersion, "check-go-version", "", true, "Checks that the version of Go in use is compatible with Delve.")
|
||||||
rootCommand.PersistentFlags().BoolVarP(&checkLocalConnUser, "only-same-user", "", true, "Only connections from the same user that started this instance of Delve are allowed to connect.")
|
rootCommand.PersistentFlags().BoolVarP(&checkLocalConnUser, "only-same-user", "", true, "Only connections from the same user that started this instance of Delve are allowed to connect.")
|
||||||
rootCommand.PersistentFlags().StringVar(&backend, "backend", "default", `Backend selection (see 'dlv help backend').`)
|
rootCommand.PersistentFlags().StringVar(&backend, "backend", "default", `Backend selection (see 'dlv help backend').`)
|
||||||
@ -509,6 +510,10 @@ func traceCmd(cmd *cobra.Command, args []string) {
|
|||||||
listener, clientConn := service.ListenerPipe()
|
listener, clientConn := service.ListenerPipe()
|
||||||
defer listener.Close()
|
defer listener.Close()
|
||||||
|
|
||||||
|
if workingDir == "" {
|
||||||
|
workingDir = "."
|
||||||
|
}
|
||||||
|
|
||||||
// Create and start a debug server
|
// Create and start a debug server
|
||||||
server := rpccommon.NewServer(&service.Config{
|
server := rpccommon.NewServer(&service.Config{
|
||||||
Listener: listener,
|
Listener: listener,
|
||||||
@ -592,11 +597,35 @@ func testCmd(cmd *cobra.Command, args []string) {
|
|||||||
defer gobuild.Remove(debugname)
|
defer gobuild.Remove(debugname)
|
||||||
processArgs := append([]string{debugname}, targetArgs...)
|
processArgs := append([]string{debugname}, targetArgs...)
|
||||||
|
|
||||||
|
if workingDir == "" {
|
||||||
|
if len(dlvArgs) == 1 {
|
||||||
|
workingDir = getPackageDir(dlvArgs[0])
|
||||||
|
} else {
|
||||||
|
workingDir = "."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return execute(0, processArgs, conf, "", debugger.ExecutingGeneratedTest, dlvArgs, buildFlags)
|
return execute(0, processArgs, conf, "", debugger.ExecutingGeneratedTest, dlvArgs, buildFlags)
|
||||||
}()
|
}()
|
||||||
os.Exit(status)
|
os.Exit(status)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getPackageDir(pkg string) string {
|
||||||
|
out, err := exec.Command("go", "list", "--json", pkg).CombinedOutput()
|
||||||
|
if err != nil {
|
||||||
|
return "."
|
||||||
|
}
|
||||||
|
type listOut struct {
|
||||||
|
Dir string `json:"Dir"`
|
||||||
|
}
|
||||||
|
var listout listOut
|
||||||
|
err = json.Unmarshal(out, &listout)
|
||||||
|
if err != nil {
|
||||||
|
return "."
|
||||||
|
}
|
||||||
|
return listout.Dir
|
||||||
|
}
|
||||||
|
|
||||||
func attachCmd(cmd *cobra.Command, args []string) {
|
func attachCmd(cmd *cobra.Command, args []string) {
|
||||||
pid, err := strconv.Atoi(args[0])
|
pid, err := strconv.Atoi(args[0])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -736,6 +765,10 @@ func execute(attachPid int, processArgs []string, conf *config.Config, coreFile
|
|||||||
|
|
||||||
disconnectChan := make(chan struct{})
|
disconnectChan := make(chan struct{})
|
||||||
|
|
||||||
|
if workingDir == "" {
|
||||||
|
workingDir = "."
|
||||||
|
}
|
||||||
|
|
||||||
// Create and start a debugger server
|
// Create and start a debugger server
|
||||||
switch apiVersion {
|
switch apiVersion {
|
||||||
case 1, 2:
|
case 1, 2:
|
||||||
|
@ -728,3 +728,23 @@ func TestTracePrintStack(t *testing.T) {
|
|||||||
t.Fatal("stacktrace not printed")
|
t.Fatal("stacktrace not printed")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestDlvTestChdir(t *testing.T) {
|
||||||
|
dlvbin, tmpdir := getDlvBin(t)
|
||||||
|
defer os.RemoveAll(tmpdir)
|
||||||
|
|
||||||
|
fixtures := protest.FindFixturesDir()
|
||||||
|
cmd := exec.Command(dlvbin, "test", filepath.Join(fixtures, "buildtest"), "--", "-test.v")
|
||||||
|
cmd.Stdin = strings.NewReader("continue\nexit\n")
|
||||||
|
out, err := cmd.CombinedOutput()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("error executing Delve: %v", err)
|
||||||
|
}
|
||||||
|
t.Logf("output: %q", out)
|
||||||
|
|
||||||
|
p, _ := filepath.Abs(filepath.Join(fixtures, "buildtest"))
|
||||||
|
tgt := "current directory: " + p
|
||||||
|
if !strings.Contains(string(out), tgt) {
|
||||||
|
t.Errorf("output did not contain expected string %q", tgt)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user