trace机制新增exception_trace
October 21st, 2011
原创文章,转载请注明: 转载自系统技术非业余研究
本文链接地址: trace机制新增exception_trace
我们在使用Erlang的时候,经常会发现exception被静悄悄得忽略掉了,这点对于诊断问题非常的不友好。R14B04新添加exception_trace帮助用户在异常的时候,得到异常得调用栈,就马上可以解决问题。 这个功能主要面对高级用户,文档里面没怎么描述这个事情,主要的实现在erts的trace模块里面,有兴趣的同学可以自己看看。
我来演示下这个功能:
$ cat test.erl
-module(test).
-compile(export_all).
start(A)->
spawn(fun ()-> demo(A) end).
demo(A) ->
1 + A.
$ erlc test.erl
$ erl
Erlang R14B04 (erts-5.8.5) [source] [smp:2:2] [rq:2] [async-threads:0] [hipe] [kernel-poll:false]
Eshell V5.8.5 (abort with ^G)
1> test:start().
** exception error: undefined function test:start/0
2> test:start(1).
<0.35.0>
3> test:start(x).
<0.37.0>
4>
=ERROR REPORT==== 21-Oct-2011::11:36:52 ===
Error in process <0.37.0> with exit value: {badarith,[{test,demo,1}]}
4> dbg:tracer(),dbg:p(all,[c ]),dbg:tpl(test,[{'_',[],[{exception_trace}]}]).
{ok,[{matched,nonode@nohost,5},{saved,x}]}
5> test:start(x).
(<0.33.0>) call test:start(x)
(<0.33.0>) returned from test:start/1 -> <0.42.0>
=ERROR REPORT==== 21-Oct-2011::11:38:00 ===
Error in process <0.42.0> with exit value: {badarith,[{test,demo,1}]}
(<0.42.0>) call test:'-start/1-fun-0-'(x)
(<0.42.0>) call test:demo(x)
(<0.42.0>) exception_from {test,demo,1} {error,badarith}
(<0.42.0>) exception_from {test,'-start/1-fun-0-',1} {error,badarith}
<0.42.0>
6>
祝玩得开心!
Post Footer automatically generated by wp-posturl plugin for wordpress.
dbg:tracer(),dbg:p(all,1),dbg:tpl(test,[{‘_’,[],[{exception_trace}]}]). ->
dbg:tracer(),dbg:p(all,call),dbg:tpl(test,[{‘_’,[],[{exception_trace}]}]).
man了几个版本都没有flag为1。
谢谢!一直觉得io很丑。
现在项目里领导不喜欢error_logger的格式就新做了个gen_event来处理命令行调试和日志输出,两个源文件就200行左右代码。支持开关。不知道这样简单的方式记录日志上线以后会不会有什么缺陷或不足(以前个人都是用lager的)。十分感谢。
hejavac Reply:
May 5th, 2014 at 2:25 pm
我也找不到Flag=1。还有exception_trace这个参数,还可以是return_trace,不知道还有没有其他的?
Yu Feng Reply:
May 5th, 2014 at 3:14 pm
用lager吧。
Yu Feng Reply:
May 5th, 2014 at 3:15 pm
别man了,看代码吧。