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  }