Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5119089
  • 博文数量: 921
  • 博客积分: 16037
  • 博客等级: 上将
  • 技术积分: 8469
  • 用 户 组: 普通用户
  • 注册时间: 2006-04-05 02:08
文章分类

全部博文(921)

文章存档

2020年(1)

2019年(3)

2018年(3)

2017年(6)

2016年(47)

2015年(72)

2014年(25)

2013年(72)

2012年(125)

2011年(182)

2010年(42)

2009年(14)

2008年(85)

2007年(89)

2006年(155)

分类: Erlang

2013-06-24 15:05:01

为什么要trace机制

因为erlang很多进程,用debuger来调试有点痛苦,如果用log的话,要在代码里面写入对应的“眼”,累了程序员不说,还影响了性能。而erlang提供了强大的trace机制,可以更好的了解整个系统的所有情况。

dbg:tracer用法

  • dbg:tracer().
    开启dbg的tracer

  • dbg:p(Item, Flags) -> {ok, MatchDesc} | {error, term()}
    设置跟踪属性.
    第一个参数Item是设定要跟踪的对象:

    • 如果Item是一个pid(),则只会trace 对应的进程,如果是在集群中,只要节点在traced nodes列表内,可以跨节点trace那个进程.

    • 如果Item是一个atom all,就会trace 整个系统所有的进程,同样可以监控整个集群。

    • 如果Item是一个atom new,就会trace 系统在此刻开始所创建的新进程,可以监控整个集群。

    • 如果Item是一个atom existing,就会trace 系统此刻之前所创建的进程,可以监控整个集群。

    第二个参数Flags是设置要监听的动作:

    • s(send) trace 进程发送的消息

    • r(receive) trace 进程受到的消息

    • m(messages) trace 进程收的或者发的消息 -.- m = s+r

    • c(call) 通过tp/2设置的匹配规则后,可以trace 进程所有的call匹配的动作。

    • p(procs) trace 与目标进程相关联的进程

    • sos(set on spwan) 使监控的进程所产生的进程继承所以trace flags

    • sol (set on link) 如果有另外的进程p2 link被监控的进程,p2会继承所有的trace flags

    • all 所有的flags

    • clear 清除所有flags

  • dbg:tp({Module, Function, Arity}, MatchSpec) -> {ok, MatchDesc} | {error, term()} 与 dbg:tpl({Module, Function, Arity}, MatchSpec) -> {ok, MatchDesc} | {error, term()}

    tpl和tp类似,只是tpl会trace 未导出函数。

    • dbg:tpl(Module, '_', []). 会trace 该module的所有的调用。

    • dbg:tpl(Module, Function, '_', []). 会trace module:function,不限定参数个数。

    • dbg:tpl(Module, Function, Arity, []). trace module:function/arity。

    • dbg:tpl(M, F, A, [{'_', [], [{return_trace}]}]). 会跟踪返回值。



      文章来自:

阅读(3902) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~