劫持恐慌输出

时间:2015-01-20 08:42:22

标签: debugging go

当我的golang应用程序恐慌时,它正在打印例程堆栈跟踪和退出。我想知道是否有很好的方法来获得进一步处理的恐慌输出。重定向stderr是不够的,因为有人想在那里放一些错误日志。我想只获得恐慌输出。

2 个答案:

答案 0 :(得分:2)

您可以使用runtime.Stack功能获取格式化的堆栈跟踪。通过传递true作为第二个参数,您可以看到所有gouroutines的堆栈跟踪。

答案 1 :(得分:0)

    1 package main
    2 
    3 import (
    4 ›   "fmt"
    5 )
    6 
    7 func main() {
    8 ›   defer func() {
    9 ›   ›   if r := recover(); r != nil {
   10 ›   ›   ›   fmt.Println("panic:", r)                                                                                                                                                                                                 
   11 ›   ›   }
   12 ›   }()
   13 
   14 ›   test := []int{1, 2, 3}
   15 ›   fmt.Println(test[5])
   16 
   17 }

使用延迟和恢复。

http://blog.golang.org/defer-panic-and-recover