mirror of
https://github.com/unknwon/the-way-to-go_ZH_CN.git
synced 2025-08-12 00:43:26 +08:00
@@ -13,7 +13,7 @@
|
||||
|
||||
## 13.10.2 用 go test 调试
|
||||
|
||||
如果代码使用了 Go 中 testing 包的基准测试功能,我们可以用 gotest 标准的 `-cpuprofile` 和 `-memprofile` 标志向指定文件写入 CPU 或 内存使用情况报告。
|
||||
如果代码使用了 Go 中 `testing` 包的基准测试功能,我们可以用 gotest 标准的 `-cpuprofile` 和 `-memprofile` 标志向指定文件写入 CPU 或 内存使用情况报告。
|
||||
|
||||
使用方式:```go test -x -v -cpuprofile=prof.out -file x_test.go```
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
|
||||
## 13.10.3 用 pprof 调试
|
||||
|
||||
你可以在单机程序 progexec 中引入 runtime/pprof 包;这个包以 pprof 可视化工具需要的格式写入运行时报告数据。对于 CPU 性能分析来说你需要添加一些代码:
|
||||
你可以在单机程序 progexec 中引入 `runtime/pprof` 包;这个包以 pprof 可视化工具需要的格式写入运行时报告数据。对于 CPU 性能分析来说你需要添加一些代码:
|
||||
|
||||
```go
|
||||
var cpuprofile = flag.String("cpuprofile", "", "write cpu profile to file")
|
||||
@@ -39,7 +39,7 @@ func main() {
|
||||
...
|
||||
```
|
||||
|
||||
代码定义了一个名为 cpuprofile 的 flag,调用 Go flag 库来解析命令行 flag,如果命令行设置了 cpuprofile flag,则开始 CPU 性能分析并把结果重定向到那个文件(os.Create 用拿到的名字创建了用来写入分析数据的文件)。这个分析程序最后需要在程序退出之前调用 StopCPUProfile 来刷新挂起的写操作到文件中;我们用 defer 来保证这一切会在 main 返回时触发。
|
||||
代码定义了一个名为 cpuprofile 的 flag,调用 Go flag 库来解析命令行 flag,如果命令行设置了 cpuprofile flag,则开始 CPU 性能分析并把结果重定向到那个文件(`os.Create` 用拿到的名字创建了用来写入分析数据的文件)。这个分析程序最后需要在程序退出之前调用 `StopCPUProfile()` 来刷新挂起的写操作到文件中;我们用 `defer` 来保证这一切会在 `main()` 返回时触发。
|
||||
|
||||
现在用这个 flag 运行程序:```progexec -cpuprofile=progexec.prof```
|
||||
|
||||
@@ -93,7 +93,7 @@ if *memprofile != "" {
|
||||
}
|
||||
```
|
||||
|
||||
用 -memprofile flag 运行这个程序:```progexec -memprofile=progexec.mprof```
|
||||
用 `-memprofile flag` 运行这个程序:```progexec -memprofile=progexec.mprof```
|
||||
|
||||
然后你可以像这样再次使用 gopprof 工具:```gopprof progexec progexec.mprof```
|
||||
|
||||
|
Reference in New Issue
Block a user