Home > Erlang探索 > trace机制新增exception_trace

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.

Categories: Erlang探索 Tags: ,
  1. teof
    July 6th, 2013 at 01:28 | #1

    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:

    我也找不到Flag=1。还有exception_trace这个参数,还可以是return_trace,不知道还有没有其他的?

    Yu Feng Reply:

    用lager吧。

    Yu Feng Reply:

    别man了,看代码吧。

Comments are closed.