Golang控制panic stack trace的深度

9 篇文章 0 订阅

通过研究官方文档,发现可以通过设置环境变量GOTRACEBACK来控制Golang panic stack trace输出的信息的多少。说明如下:

环境变量GOTRACEBACK可以控制Go进程由于不可恢复的panic或者未预料到的其他运行时异常而产生的错误堆栈输出的信息的多少。默认情况下(single),当产生错误的时候,只会打印出异常goroutine的异常堆栈,当不存在当前goroutine或者是由于runtime内部的错误导致的panic,则会打印出所有goroutine的堆栈。 GOTRACEBACK的设置值有几种,下面分别说明:

export GOTRACEBACK=none :完全省略panic的 stack traces

export GOTRACEBACK=single (默认值)只打印当前goroutine的部分stack traces。当不存在当前goroutine或者是由于runtime内部的错误导致的panic,则会打印出所有goroutine的堆栈。

export GOTRACEBACK=all :打印用户创建的所有goroutine的stack trace。

export GOTRACEBACK=system :与all的行为很像,只不过会将runtime的goroutine的stace trace也打出来,并且还会显示出runtime内部创建的所有goroutine。

export GOTRACEBACK=crash:与“system”的行为很像,只不过当进程crash的时候不是直接退出,而是可以按照操作系统指定的方式进行后续处理。

例如,在Unix操作系统中,crash会发送一个SIGABRT信号触发core dump。由于历史原因,当将系统环境变量GOTRACEBACK设置为:0, 1, 和 2 的时候,分别代表none, all和system。通过包runtime/debug package中的方法SetTraceback,也可以设置相应的GOTRACEBACK的值,进而控制输出的stack trace的内容的多少,但是通过该方法,不能够设置比系统环境变量的level更低的值。而level的高低顺序为:

none<single<all<system<crash

具体SetTraceback方法的时候可以参考: https://golang.org/pkg/runtime/debug/#SetTraceback .

参考
https://golang.org/pkg/runtime/
https://golang.org/pkg/runtime/debug/#SetTraceback

转载自:https://meta.tn/a/bd04b6637739d596a5177404a807565d8875a1ed821417ccae5b056e58e77982

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值