Golang程序执行跟踪方法与技巧
Golang程序执行跟踪方法与技巧
大家好,
能否有人看一下我的项目,检查一下“sort”文件夹中的函数是否被调用了?它们对于创建新的排序GIF(这是项目的目的)是必需的吗?
bareyowsky/Algorithms-Visualisation (github.com)
例如,当我运行这个命令:
它运行良好,并创建了一个名为 quick.gif 的新GIF,它展示了快速排序算法,但我想知道它是否使用了“sort”文件夹中 quick.go 文件的函数。
提前感谢!
更多关于Golang程序执行跟踪方法与技巧的实战教程也可以访问 https://www.itying.com/category-94-b0.html
这是一个非常好的建议,我刚刚按照您说的检查了一下,它完全有效!非常感谢! 
更多关于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 时的作用。

