gpt4 book ai didi

go - 我可以在 pprof 下运行一些东西并传递命令行参数吗?

转载 作者:行者123 更新时间:2023-12-03 00:02:41 27 4
gpt4 key购买 nike

我有一个 go 二进制文件,它使用 cobra 作为子命令。每个子命令都有它自己的标志。我希望能够为具有一组特定参数的命令创建 CPU 配置文件,例如:

myBinary dryRun -c configs/config.json

但是,如果我尝试运行它,如下所示:

go tool pprof -pdf myBinary -- dryRun -c configs/config.json

我收到以下错误:

-: open --: no such file or directory
dryRun: open dryRun: no such file or directory
-c: open -c: no such file or directory
configs/config.json: parsing profile: unrecognized profile format

如果我尝试引用整个命令,它也不起作用。有没有办法让 go tool pprof 传递其他命令行参数?

编辑:这就是我尝试分析的方式:

func main() {
defer profile.Start().Stop()

fmt.Println("running version", version, "built on", date)
fmt.Println()
cmd.Execute()

time.Sleep(2 * time.Second)
}

最佳答案

@Geo

使用 pprof 分析 cobra 命令行应用程序时遇到同样的问题

您只需将您的标志选择嵌入到单独的 main.go 中并直接调用该包

就我而言,我设法解决了这个问题

  • 在顶层创建另一个文件夹,并将其添加到 .gitignore
  • 使用 func main() 创建了 main 包

您需要为您想要尝试的每个组合编辑主函数,但最终会得到一个可以在没有任何标志的情况下 pprof 的二进制文件

我正在分析的 cobra 命令

https://github.com/mutl3y/PRTG_VMware/blob/dev1/cmd/summary.go

我的分析示例

/profiling/main.go

package main

import (
"github.com/mutl3y/PRTG_VMware/VMware"
"github.com/pkg/profile"
"log"
"net/url"
"time"
)

func main() {
defer profile.Start().Stop()
u, err := url.Parse("https://192.168.59.4/sdk")
if err != nil {
log.Fatalf("failed to parse url")
}
c, err := VMware.NewClient(u, "prtg@heynes.local", ".l3tm31n", 2*time.Second)
if err != nil {
log.Fatalf("failed %v", err)
}

err = c.VmSummary("", "vm-13", &VMware.LimitsStruct{}, time.Second, true,[]string{})
if err != nil {
log.Fatalf("vmSummaryfailed %v", err)

}

}

关于go - 我可以在 pprof 下运行一些东西并传递命令行参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52302692/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com