Skip to content

cmd/go: default godebug settings not recorded for test binaries #68053

Closed
@seankhliao

Description

@seankhliao

Go version

go version devel go1.23-e44fa1c1a9 2024-06-18 15:33:06 +0000 linux/amd64

Output of go env in your module/workspace:

GO111MODULE=''
GOARCH='amd64'
GOBIN=''
GOCACHE='/home/user/.cache/go-build'
GOENV='/home/user/.config/go/env'
GOEXE=''
GOEXPERIMENT='cacheprog'
GOFLAGS='-trimpath "-ldflags=-s -w"'
GOHOSTARCH='amd64'
GOHOSTOS='linux'
GOINSECURE=''
GOMODCACHE='/home/user/.data/go/pkg/mod'
GONOPROXY=''
GONOSUMDB=''
GOOS='linux'
GOPATH='/home/user/.data/go'
GOPRIVATE=''
GOPROXY='https://proxy.golang.org,direct'
GOROOT='/home/user/sdk/gotip'
GOSUMDB='sum.golang.org'
GOTMPDIR=''
GOTOOLCHAIN='path'
GOTOOLDIR='/home/user/sdk/gotip/pkg/tool/linux_amd64'
GOVCS=''
GOVERSION='devel go1.23-e44fa1c1a9 2024-06-18 15:33:06 +0000'
GODEBUG=''
GOTELEMETRY='local'
GOTELEMETRYDIR='/home/user/.config/go/telemetry'
GCCGO='gccgo'
GOAMD64='v3'
AR='ar'
CC='gcc'
CXX='g++'
CGO_ENABLED='0'
GOMOD='/home/user/tmp/testrepo0652/go.mod'
GOWORK=''
CGO_CFLAGS='-O2 -g'
CGO_CPPFLAGS=''
CGO_CXXFLAGS='-O2 -g'
CGO_FFLAGS='-O2 -g'
CGO_LDFLAGS='-O2 -g'
PKG_CONFIG='pkg-config'
GOGCCFLAGS='-fPIC -m64 -Wl,--no-gc-sections -fmessage-length=0 -ffile-prefix-map=/tmp/go-build1549253000=/tmp/go-build -gno-record-gcc-switches'

What did you do?

for a main_test.go (note: should be run without the main.go file below as it can affect the debug settings):

//go:debug panicnil=1
package main_test

import (
	"runtime/debug"
	"testing"
)

func TestFoo(t *testing.T) {
	defer func() {
		t.Fatal(recover())
	}()

	t.Log(debug.ReadBuildInfo())
	panic(nil)
}

running it:

=== RUN   TestFoo
    main_test.go:14: go	devel go1.23-e44fa1c1a9 2024-06-18 15:33:06 +0000 X:cacheprog
        path	go.seankhliao.com/testrepo0652
        mod	go.seankhliao.com/testrepo0652	(devel)	
        build	-buildmode=exe
        build	-compiler=gc
        build	-trimpath=true
        build	DefaultGODEBUG=asynctimerchan=1,gotypesalias=0,tls3des=1,tlskyber=0,x509keypairleaf=0,x509negativeserial=1
        build	CGO_ENABLED=0
        build	GOARCH=amd64
        build	GOEXPERIMENT=cacheprog
        build	GOOS=linux
        build	GOAMD64=v3
         true
    main_test.go:11: <nil>
--- FAIL: TestFoo (0.00s)
FAIL
FAIL	go.seankhliao.com/testrepo0652	0.001s
FAIL

vs

a main.go:

//go:debug panicnil=1
package main

import (
	"fmt"
	"runtime/debug"
)

func main() {
	defer func() {
		fmt.Println(recover())
	}()

	fmt.Println(debug.ReadBuildInfo())
	panic(nil)
}

running it:

go	devel go1.23-e44fa1c1a9 2024-06-18 15:33:06 +0000 X:cacheprog
path	go.seankhliao.com/testrepo0652
mod	go.seankhliao.com/testrepo0652	(devel)	
build	-buildmode=exe
build	-compiler=gc
build	-trimpath=true
build	DefaultGODEBUG=asynctimerchan=1,gotypesalias=0,panicnil=1,tls3des=1,tlskyber=0,x509keypairleaf=0,x509negativeserial=1
build	CGO_ENABLED=0
build	GOARCH=amd64
build	GOEXPERIMENT=cacheprog
build	GOOS=linux
build	GOAMD64=v3
 true
<nil>

What did you see happen?

The test binary did not record a DefaultGODEBUG=panicnil=1, while the setting was clearly in effect (recover nil).

What did you expect to see?

The setting recorded as part of DefaultGODEBUG

Metadata

Metadata

Assignees

Labels

GoCommandcmd/goNeedsFixThe path to resolution is known, but the work has not been done.

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions