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) 1 [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,1),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>
祝玩得开心!

转载请注明:《trace机制新增exception_trace