github.com/cilium/cilium@v1.16.2/images/builder/debug-wrapper.go (about) 1 // SPDX-License-Identifier: Apache-2.0 2 // Copyright Authors of Cilium 3 4 package main 5 6 import ( 7 "errors" 8 "fmt" 9 "log" 10 "os" 11 "os/exec" 12 ) 13 14 func main() { 15 bin, err := os.Executable() 16 if err != nil { 17 log.Println(err) 18 os.Exit(1) 19 } 20 21 debugPort, ok := os.LookupEnv("DEBUG_PORT") 22 if !ok || debugPort == "" { 23 debugPort = "2345" 24 } 25 26 debugContinue := true 27 if debugHold, ok := os.LookupEnv("DEBUG_HOLD"); ok && debugHold == "true" { 28 debugContinue = false 29 } 30 31 args := []string{ 32 fmt.Sprintf("--listen=:%s", debugPort), 33 "--headless=true", 34 fmt.Sprintf("--continue=%t", debugContinue), 35 "--log=true", 36 "--log-output=debugger,debuglineerr,gdbwire,lldbout,rpc", 37 "--accept-multiclient", 38 "--api-version=2", 39 "exec", 40 fmt.Sprintf("%s-bin", bin), 41 "--", 42 } 43 44 args = append(args, os.Args[1:]...) 45 46 cmd := exec.Command("/usr/bin/dlv", args...) 47 cmd.Stdout = os.Stdout 48 cmd.Stderr = os.Stderr 49 50 if err = cmd.Run(); err != nil { 51 if exitErr := (&exec.ExitError{}); errors.As(err, &exitErr) { 52 os.Exit(exitErr.ExitCode()) 53 } else { 54 log.Printf("failed to execute dlv: %v", err) 55 os.Exit(1) 56 } 57 } 58 }