env GOGARBLE=test/main # Tiny mode garble -tiny build ! binsubstr main$exe 'garble_main.go' 'fmt/print.go' env GODEBUG='allocfreetrace=1,gcpacertrace=1,gctrace=1,inittrace=1,scavenge=1,scavtrace=1,scheddetail=1,schedtrace=10' ! exec ./main$exe env GODEBUG='' # Ensure further commands don't have weirdness due to GODEBUG. stderr '^\(0x[\d\w]{4,8},0x[\d\w]{4,8}\)' # interfaces/pointers print correctly # With -tiny, all line numbers are reset to 1. # Unfortunately, line comment directives don't allow erasing line numbers entirely. stderr '^caller: \?\? 1$' # position info is removed stderr '^recovered: ya like jazz?' ! stderr '^init runtime' # GODEBUG prints are hidden, like inittrace=1 ! stderr 'panic: oh noes' # panics are hidden [short] stop # no need to verify this with -short # Default mode garble build ! exec ./main$exe stderr '^caller: [0-9a-zA-Z_]+\.go [1-9]' stderr '^recovered: ya like jazz?' stderr 'panic: oh noes' -- go.mod -- module test/main go 1.19 -- garble_main.go -- package main import "runtime" func main() { var v any = "tada" println(v) defer func() { if r := recover(); r != nil { println("recovered:", r.(string)) panic("oh noes") } }() _, file, line, _ := runtime.Caller(0) println("caller:", file, line) panic("ya like jazz?") }