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了,看代码吧。