Golang程序执行跟踪方法与技巧

Golang程序执行跟踪方法与技巧 大家好, 能否有人看一下我的项目,检查一下“sort”文件夹中的函数是否被调用了?它们对于创建新的排序GIF(这是项目的目的)是必需的吗? bareyowsky/Algorithms-Visualisation (github.com) 例如,当我运行这个命令:image 它运行良好,并创建了一个名为 quick.gif 的新GIF,它展示了快速排序算法,但我想知道它是否使用了“sort”文件夹中 quick.go 文件的函数。 提前感谢!


更多关于Golang程序执行跟踪方法与技巧的实战教程也可以访问 https://www.itying.com/category-94-b0.html

3 回复

这是一个非常好的建议,我刚刚按照您说的检查了一下,它完全有效!非常感谢! smiley

更多关于Golang程序执行跟踪方法与技巧的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


我知道之前说过可以使用性能分析来找出问题,但现在我觉得在排序函数中添加一个 fmt.Println("test from sort.QuickSort") 作为完整性检查,看看它们是否被调用,可能会更快。确认后可以移除这个调用。

func main() {
    fmt.Println("hello world")
}

要检查 sort 文件夹中的函数是否被调用,可以使用 Go 的内置工具进行程序执行跟踪。以下是具体的方法和技巧:

1. 使用 go test 的覆盖率分析

在项目根目录运行以下命令,生成覆盖率报告:

go test -coverprofile=coverage.out ./...
go tool cover -html=coverage.out

这会打开浏览器显示覆盖率报告,你可以查看 sort 文件夹中函数的调用情况。

2. 使用 go tool trace 进行执行跟踪

main.go 中添加跟踪代码,然后运行程序生成跟踪文件:

package main

import (
    "os"
    "runtime/trace"
)

func main() {
    f, _ := os.Create("trace.out")
    defer f.Close()
    trace.Start(f)
    defer trace.Start(f)
    
    // 原有的 main 函数代码
}

运行程序后,使用以下命令分析跟踪文件:

go tool trace trace.out

3. 使用 pprof 进行性能分析

在代码中导入 _ "net/http/pprof" 并启动 HTTP 服务器:

import _ "net/http/pprof"

func main() {
    go func() {
        log.Println(http.ListenAndServe("localhost:6060", nil))
    }()
    // 原有的 main 函数代码
}

运行程序后,使用以下命令获取函数调用图:

go tool pprof http://localhost:6060/debug/pprof/profile?seconds=30

4. 使用 go vet 进行静态分析

运行以下命令检查未使用的函数:

go vet ./...

5. 使用 callgraph 工具生成调用图

安装并运行 callgraph 工具:

go install golang.org/x/tools/cmd/callgraph@latest
callgraph -algo=static ./... | grep -E "sort/quick"

6. 在代码中添加日志输出

sort/quick.go 的关键函数中添加日志语句:

package sort

import "log"

func QuickSort(arr []int) {
    log.Println("QuickSort function called")
    // 原有的排序代码
}

7. 使用调试器

使用 delve 调试器设置断点:

dlv debug main.go
(dlv) break sort.QuickSort
(dlv) continue

这些方法可以帮助你确定 sort 文件夹中的函数是否被调用,以及它们在创建排序 GIF 时的作用。

回到顶部