Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Can't use values of "env" in "args" #1877

Closed
bartekpacia opened this issue Nov 6, 2021 · 2 comments
Closed

Can't use values of "env" in "args" #1877

bartekpacia opened this issue Nov 6, 2021 · 2 comments
Labels
FrozenDueToAge Infeasible Infeasible problem or feature request
Milestone

Comments

@bartekpacia
Copy link

What version of Go, VS Code & VS Code Go extension are you using?

Version Information
  • Run go version to get version of Go from the VS Code integrated terminal.

    • go version go1.17.2 darwin/arm64
  • Run gopls -v version to get version of Gopls from the VS Code integrated terminal.

    • zsh: command not found: gopls
      I don't know why
  • Run code -v or code-insiders -v to get version of VS Code or VS Code Insiders.

  • Check your installed extensions to get the version of the VS Code Go extension

    • 1.62.0
      b3318bc0524af3d74034b8bb8a64df0ccf35549a
      arm64
  • Run Ctrl+Shift+P (Cmd+Shift+P on Mac OS) > Go: Locate Configured Go Tools command.

Checking configured tools....
GOBIN: undefined
toolsGopath: 
gopath: /Users/bartek/go
GOROOT: /opt/homebrew/Cellar/go/1.17.2/libexec
PATH: /Users/bartek/.cargo/bin:/usr/local/go/bin:/Users/bartek/.rbenv/shims:/Users/bartek/.rbenv/bin:/Users/bartek/.poetry/bin:/Users/bartek/.pyenv/shims:/usr/local/opt/avr-gcc@11/bin:/Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home/bin:/Users/bartek/androidsdk/emulator:/Users/bartek/androidsdk/platform-tools:/Users/bartek/androidsdk/cmdline-tools/tools/lib:/Users/bartek/androidsdk/cmdline-tools/tools/bin:/Users/bartek/androidsdk:/Users/bartek/fvm/default/bin:/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/MacGPG2/bin:/Library/Apple/usr/bin

	go:	/opt/homebrew/bin/go: go version go1.17.2 darwin/arm64

	gopkgs:	/Users/bartek/go/bin/gopkgs: go1.17.2
		path	github.com/uudashr/gopkgs/v2/cmd/gopkgs
		mod	github.com/uudashr/gopkgs/v2	v2.1.2	h1:A0+QH6wqNRHORJnxmqfeuBEsK4nYQ7pgcOHhqpqcrpo=
		dep	github.com/karrick/godirwalk	v1.12.0	h1:nkS4xxsjiZMvVlazd0mFyiwD4BR9f3m6LXGhM2TUx3Y=
		dep	github.com/pkg/errors	v0.8.1	h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
	
	go-outline:	/Users/bartek/go/bin/go-outline: go1.17.2
		path	github.com/ramya-rao-a/go-outline
		mod	github.com/ramya-rao-a/go-outline	v0.0.0-20210608161538-9736a4bde949	h1:iaD+iVf9xGfajsJp+zYrg9Lrk6gMJ6/hZHO4cYq5D5o=
		dep	golang.org/x/tools	v0.1.1	h1:wGiQel/hW0NnEkJUk8lbzkX2gFJU6PFxf1v5OlCfuOs=
	
	gotests:	/Users/bartek/go/bin/gotests: go1.17.2
		path	github.com/cweill/gotests/gotests
		mod	github.com/cweill/gotests	v1.6.0	h1:KJx+/p4EweijYzqPb4Y/8umDCip1Cv6hEVyOx0mE9W8=
		dep	golang.org/x/tools	v0.0.0-20191109212701-97ad0ed33101	h1:LCmXVkvpQCDj724eX6irUTPCJP5GelFHxqGSWL2D1R0=
	
	gomodifytags:	/Users/bartek/go/bin/gomodifytags: go1.17.2
		path	github.com/fatih/gomodifytags
		mod	github.com/fatih/gomodifytags	v1.16.0	h1:B65npXIXSk44F6c1hZGE1NazSnt+eXvtdEOG2Uy+QdU=
		dep	github.com/fatih/camelcase	v1.0.0	h1:hxNvNX/xYBp0ovncs8WyWZrOrpBNub/JfaMvbURyft8=
		dep	github.com/fatih/structtag	v1.2.0	h1:/OdNE99OxoI/PqaW/SuSK9uxxT3f/tcSZgon/ssNSx4=
		dep	golang.org/x/tools	v0.0.0-20180824175216-6c1c5e93cdc1	h1:EAPsk8kfGCjxQagrkWjzXlUWe2p3gj5MknO+z2o9GKc=
	
	impl:	/Users/bartek/go/bin/impl: go1.17.2
		path	github.com/josharian/impl
		mod	github.com/josharian/impl	v1.1.0	h1:gafhg1OFVMq46ifdkBa8wp4hlGogjktjjA5h/2j4+2k=
		dep	golang.org/x/mod	v0.2.0	h1:KU7oHjnv3XNWfa5COkzUifxZmxp1TyI7ImMXqFxLwvQ=
		dep	golang.org/x/tools	v0.0.0-20200522201501-cb1345f3a375	h1:SjQ2+AKWgZLc1xej6WSzL+Dfs5Uyd5xcZH1mGC411IA=
		dep	golang.org/x/xerrors	v0.0.0-20191204190536-9bdfabe68543	h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
	
	goplay:	/Users/bartek/go/bin/goplay: go1.17.2
		path	github.com/haya14busa/goplay/cmd/goplay
		mod	github.com/haya14busa/goplay	v1.0.0	h1:ED4BMrGQ3WH7H3YXrcnWMVzj1xeSepaYTkLh1DtFi/4=
		dep	github.com/skratchdot/open-golang	v0.0.0-20200116055534-eef842397966	h1:JIAuq3EEf9cgbU6AtGPK4CTG3Zf6CKMNqf0MHTggAUA=
	
	dlv:	/Users/bartek/go/bin/dlv: go1.17.2
		path	github.com/go-delve/delve/cmd/dlv
		mod	github.com/go-delve/delve	v1.7.2	h1:QTDJlgx9OwUVYVm7xthyf2XHKrZcTQu3wkRbovktidM=
		dep	github.com/cosiner/argv	v0.1.0	h1:BVDiEL32lwHukgJKP87btEPenzrrHUjajs/8yzaqcXg=
		dep	github.com/cpuguy83/go-md2man/v2	v2.0.0	h1:EoUDS0afbrsXAZ9YQ9jdu/mZ2sXgT1/2yyNng4PGlyM=
		dep	github.com/derekparker/trie	v0.0.0-20200317170641-1fdf38b7b0e9	h1:G765iDCq7bP5opdrPkXk+4V3yfkgV9iGFuheWZ/X/zY=
		dep	github.com/google/go-dap	v0.5.1-0.20210713061233-c91b005e3987	h1:aghNk+kvabZ5I1OC3cNHWvfZ8svcoDLAGyKYimqyGVk=
		dep	github.com/hashicorp/golang-lru	v0.5.4	h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc=
		dep	github.com/mattn/go-isatty	v0.0.3	h1:ns/ykhmWi7G9O+8a448SecJU3nSMBXJfqQkl0upE1jI=
		dep	github.com/peterh/liner	v0.0.0-20170317030525-88609521dc4b	h1:8uaXtUkxiy+T/zdLWuxa/PG4so0TPZDZfafFNNSaptE=
		dep	github.com/russross/blackfriday/v2	v2.0.1	h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q=
		dep	github.com/shurcooL/sanitized_anchor_name	v1.0.0	h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo=
		dep	github.com/sirupsen/logrus	v1.6.0	h1:UBcNElsrwanuuMsnGSlYmtmgbb23qDR5dG+6X6Oo89I=
		dep	github.com/spf13/cobra	v1.1.3	h1:xghbfqPkxzxP3C/f3n5DdpAbdKLj4ZE4BWQI362l53M=
		dep	github.com/spf13/pflag	v1.0.5	h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
		dep	go.starlark.net	v0.0.0-20200821142938-949cc6f4b097	h1:YiRMXXgG+Pg26t1fjq+iAjaauKWMC9cmGFrtOEuwDDg=
		dep	golang.org/x/arch	v0.0.0-20190927153633-4e8777c89be4	h1:QlVATYS7JBoZMVaf+cNjb90WD/beKVHnIxFKT4QaHVI=
		dep	golang.org/x/sys	v0.0.0-20210514084401-e8d321eab015	h1:hZR0X1kPW+nwyJ9xRxqZk1vx5RUObAPBdKVvXPDUH/E=
		dep	gopkg.in/yaml.v2	v2.4.0	h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
	
	dlv-dap:	/Users/bartek/go/bin/dlv-dap: go1.17.2
		path	github.com/go-delve/delve/cmd/dlv
		mod	github.com/go-delve/delve	v1.7.3-0.20211103164926-183bb8dffd9f	h1:36eyXpzubaI0iSUvyoNZ5HEcH3UsUhn25NPLc6SGS9U=
		dep	github.com/cosiner/argv	v0.1.0	h1:BVDiEL32lwHukgJKP87btEPenzrrHUjajs/8yzaqcXg=
		dep	github.com/cpuguy83/go-md2man/v2	v2.0.0	h1:EoUDS0afbrsXAZ9YQ9jdu/mZ2sXgT1/2yyNng4PGlyM=
		dep	github.com/derekparker/trie	v0.0.0-20200317170641-1fdf38b7b0e9	h1:G765iDCq7bP5opdrPkXk+4V3yfkgV9iGFuheWZ/X/zY=
		dep	github.com/google/go-dap	v0.6.0	h1:Y1RHGUtv3R8y6sXq2dtGRMYrFB2hSqyFVws7jucrzX4=
		dep	github.com/hashicorp/golang-lru	v0.5.4	h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc=
		dep	github.com/mattn/go-isatty	v0.0.3	h1:ns/ykhmWi7G9O+8a448SecJU3nSMBXJfqQkl0upE1jI=
		dep	github.com/mattn/go-runewidth	v0.0.3	h1:a+kO+98RDGEfo6asOGMmpodZq4FNtnGP54yps8BzLR4=
		dep	github.com/peterh/liner	v1.2.1	h1:O4BlKaq/LWu6VRWmol4ByWfzx6MfXc5Op5HETyIy5yg=
		dep	github.com/russross/blackfriday/v2	v2.0.1	h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q=
		dep	github.com/shurcooL/sanitized_anchor_name	v1.0.0	h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo=
		dep	github.com/sirupsen/logrus	v1.6.0	h1:UBcNElsrwanuuMsnGSlYmtmgbb23qDR5dG+6X6Oo89I=
		dep	github.com/spf13/cobra	v1.1.3	h1:xghbfqPkxzxP3C/f3n5DdpAbdKLj4ZE4BWQI362l53M=
		dep	github.com/spf13/pflag	v1.0.5	h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
		dep	go.starlark.net	v0.0.0-20200821142938-949cc6f4b097	h1:YiRMXXgG+Pg26t1fjq+iAjaauKWMC9cmGFrtOEuwDDg=
		dep	golang.org/x/arch	v0.0.0-20190927153633-4e8777c89be4	h1:QlVATYS7JBoZMVaf+cNjb90WD/beKVHnIxFKT4QaHVI=
		dep	golang.org/x/sys	v0.0.0-20211019181941-9d821ace8654	h1:id054HUawV2/6IGm2IV8KZQjqtwAOo2CYlOToYqa0d0=
		dep	gopkg.in/yaml.v2	v2.4.0	h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
	
	staticcheck:	/Users/bartek/go/bin/staticcheck: go1.17.2
		path	honnef.co/go/tools/cmd/staticcheck
		mod	honnef.co/go/tools	v0.2.1	h1:/EPr//+UMMXwMTkXvCCoaJDq8cpjMO80Ou+L4PDo2mY=
		dep	github.com/BurntSushi/toml	v0.3.1	h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
		dep	golang.org/x/mod	v0.3.0	h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4=
		dep	golang.org/x/sys	v0.0.0-20210119212857-b64e53b001e4	h1:myAQVi0cGEoqQVR5POX+8RR2mrocKqNN1hmeMqhX27k=
		dep	golang.org/x/tools	v0.1.0	h1:po9/4sTYwZU9lPhi1tOrb4hCv3qrhiQ77LZfGa2OjwY=
		dep	golang.org/x/xerrors	v0.0.0-20200804184101-5ec99f83aff1	h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
	
	gopls:	/Users/bartek/go/bin/gopls: go1.17.2
		path	golang.org/x/tools/gopls
		mod	golang.org/x/tools/gopls	v0.7.3	h1:Lru57ht8vtDMouRskFC085VAjBAZRAISd/lwvwOOV0Q=
		dep	github.com/BurntSushi/toml	v0.3.1	h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
		dep	github.com/google/go-cmp	v0.5.6	h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ=
		dep	github.com/sergi/go-diff	v1.1.0	h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0=
		dep	golang.org/x/mod	v0.4.2	h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo=
		dep	golang.org/x/sync	v0.0.0-20210220032951-036812b2e83c	h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ=
		dep	golang.org/x/sys	v0.0.0-20210809222454-d867a43fc93e	h1:WUoyKPm6nCo1BnNUvPGnFG3T5DUVem42yDJZZ4CNxMA=
		dep	golang.org/x/text	v0.3.6	h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M=
		dep	golang.org/x/tools	v0.1.8-0.20211014194737-fc98fb2abd48	h1:hk7xRoeg0CG1nRLsd5BZLDUgVpA9bnKylGk1p2/BPH0=
		dep	golang.org/x/xerrors	v0.0.0-20200804184101-5ec99f83aff1	h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
		dep	honnef.co/go/tools	v0.2.0	h1:ws8AfbgTX3oIczLPNPCu5166oBg9ST2vNs0rcht+mDE=
		dep	mvdan.cc/gofumpt	v0.1.1	h1:bi/1aS/5W00E2ny5q65w9SnKpWEF/UIOqDYBILpo9rA=
		dep	mvdan.cc/xurls/v2	v2.3.0	h1:59Olnbt67UKpxF1EwVBopJvkSUBmgtb468E4GVWIZ1I=
	

go env
Workspace Folder (vscode-go-bug): /Users/bartek/dev/bartekpacia/vscode-go-bug
	GO111MODULE=""
	GOARCH="arm64"
	GOBIN=""
	GOCACHE="/Users/bartek/Library/Caches/go-build"
	GOENV="/Users/bartek/Library/Application Support/go/env"
	GOEXE=""
	GOEXPERIMENT=""
	GOFLAGS=""
	GOHOSTARCH="arm64"
	GOHOSTOS="darwin"
	GOINSECURE=""
	GOMODCACHE="/Users/bartek/go/pkg/mod"
	GONOPROXY=""
	GONOSUMDB=""
	GOOS="darwin"
	GOPATH="/Users/bartek/go"
	GOPRIVATE=""
	GOPROXY="https://proxy.golang.org,direct"
	GOROOT="/opt/homebrew/Cellar/go/1.17.2/libexec"
	GOSUMDB="sum.golang.org"
	GOTMPDIR=""
	GOTOOLDIR="/opt/homebrew/Cellar/go/1.17.2/libexec/pkg/tool/darwin_arm64"
	GOVCS=""
	GOVERSION="go1.17.2"
	GCCGO="gccgo"
	AR="ar"
	CC="clang"
	CXX="clang++"
	CGO_ENABLED="1"
	GOMOD="/dev/null"
	CGO_CFLAGS="-g -O2"
	CGO_CPPFLAGS=""
	CGO_CXXFLAGS="-g -O2"
	CGO_FFLAGS="-g -O2"
	CGO_LDFLAGS="-g -O2"
	PKG_CONFIG="pkg-config"
	GOGCCFLAGS="-fPIC -arch arm64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/z8/vl6s_16515s6h_j8z7bs1tmm0000gn/T/go-build680657176=/tmp/go-build -gno-record-gcc-switches -fno-common"
	

Share the Go related settings you have added/edited

Run Preferences: Open Settings (JSON) command to open your settings.json file.
Share all the settings with the go. or ["go"] or gopls prefixes.

"go.toolsManagement.autoUpdate": true,
"go.useLanguageServer": true,
"go.lintTool": "staticcheck",
"go.lintFlags": ["-checks=all"],
"[go]": {
    "editor.codeActionsOnSave": {
      "source.organizeImports": true,
      "source.fixAll": true
    }
  }

Describe the bug

I can't use the value of Launch Configurations "env" inside of my "args" (in the same configuration).

Given the main.go:

package main

import (
	"fmt"
	"os"
)

func main() {
	fmt.Println("EXAMPLE_ENV:", os.Getenv("EXAMPLE_ENV"))

	for i, v := range os.Args {
		fmt.Printf("arg %d: %s\n", i, v)
	}
}

and the following launch.json:

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Launch",
      "type": "go",
      "request": "launch",
      "mode": "debug",
      "program": "main.go",
      "env": { "EXAMPLE_ENV": "here it is" },
      "args": ["the first arg", "${env:EXAMPLE_ENV}"]
    }
  ]
}

I get the following output after running the "Launch" configuration from VSCode:

Starting: /Users/bartek/go/bin/dlv-dap dap --check-go-version=false --listen=127.0.0.1:51493 --log-dest=3 from /Users/bartek/dev/bartekpacia/vscode-go-bug
DAP server listening at: 127.0.0.1:51493
Type 'dlv help' for list of commands.
EXAMPLE_ENV: here it is
arg 0: /var/folders/z8/vl6s_16515s6h_j8z7bs1tmm0000gn/T/__debug_bin3813443476
arg 1: the first arg
arg 2: 
Process 18783 has exited with status 0
Detaching
dlv dap (18763) exited with code: 0

whereas I would expect:

Starting: /Users/bartek/go/bin/dlv-dap dap --check-go-version=false --listen=127.0.0.1:51493 --log-dest=3 from /Users/bartek/dev/bartekpacia/vscode-go-bug
DAP server listening at: 127.0.0.1:51493
Type 'dlv help' for list of commands.
EXAMPLE_ENV: here it is
arg 0: /var/folders/z8/vl6s_16515s6h_j8z7bs1tmm0000gn/T/__debug_bin3813443476
arg 1: the first arg
arg 2:  here it is
Process 18783 has exited with status 0
Detaching
dlv dap (18763) exited with code: 0

I've lost a bit of time trying to make this work before filing this bug. I think it should be either clearly described that this is not possible, or implemented so that it would work just like I (and many others, I guess) expect.

@gopherbot gopherbot added this to the Untriaged milestone Nov 6, 2021
@hyangah hyangah added the Infeasible Infeasible problem or feature request label Nov 8, 2021
@hyangah
Copy link
Contributor

hyangah commented Nov 8, 2021

variables substitution is done by VSCode before a debugging session starts, and env is a debug-adapter specific argument handled after a debugging session starts. So, when variables referenced in args are resolved, the env variable won't be set when VSCode needs it so VSCode will replace it to an empty string.

Sorry, this is infeasible right now.

If you already know the arg to pass, just specify it directly in the args.

@hyangah hyangah closed this as completed Nov 8, 2021
@bartekpacia
Copy link
Author

bartekpacia commented Nov 8, 2021

@hyangah thanks for responding.

I understand that it won't be implemented:) But I would still like some information (the explanation you provided above is great!) about this behavior to be included somewhere in the VSCode debugging docs, for example here.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
FrozenDueToAge Infeasible Infeasible problem or feature request
Projects
None yet
Development

No branches or pull requests

3 participants