`
coderplay
  • 浏览: 578013 次
  • 性别: Icon_minigender_1
  • 来自: 广州杭州
社区版块
存档分类
最新评论

Tracing和dbg

阅读更多
代码不必用特殊的标记(比如debug_info)来编译,也可以trace.

erlang:trace是最底层的BIF实现的trace功能。格式如下

erlang:trace(PidSpec,How,FlagList)

它要通过erlang:trace_pattern(MFA,MatchSpec,FlagList)来辅助输出.

MatchSpec这东西很难写,在dbg模块中可以用dbg:fun2ms,它可以把函数转成MatchSpec.

比如:
dbg:fun2ms(fun(_) -> return_trace() end).
相当于
[{'_',[],[{return_trace}]}]

 dbg:fun2ms(fun([M,N]) when N > 3 -> return_trace() end).
相当于
 [{['$1','$2'],[{'>','$2',3}],[{return_trace}]}]




代码
  1. dbg:p(Item, Flags) -> {ok, MatchDesc} | {error, term()}   
类型说明:

MatchDesc = [MatchNum]
MatchNum = {matched, node(), integer()} | {matched, node(), 0, RPCError}
RPCError = term()

Item

  • 如果Item是一个 pid(), 对应的进程会被跟踪.此进程可能是一个远程进程(在另外的一个Erlang节点上). 这个节点必须在被跟踪节点列表中. (见 n/1 and tracer/0/2/3).
  • 如果Item是一个all原子, 系统的所有进程和以后建的进程都会被跟踪.它同样对通过n/1 or tracer/0/2/3函数加入的节点有效. 
  • 如果Item是一个new原子,则现存的进程不受影响, 而后建立的进程则会被跟踪. 它同样对通过n/1 or tracer/0/2/3函数加入的节点有效. 
  • 如果Item是一个existing原子,对现存的进程有效,对后来建立的进程无效.它同样对通过n/1 or tracer/0/2/3函数加入的节点有效. 
  • 如果Item既不是all, new ,也不是existing原子, 则注册了此名称的进程会被跟踪.此进程可能是一个远程进程(在另外的一个Erlang节点上). 这个节点必须在被跟踪节点列表中. (见 n/1 and tracer/0/2/3).
  • 如果Item 是一整数,则进程 <item.1></item.1> 被跟踪
  • 如果Item是一个元组{X, Y, Z}, 则进程 <x.y.z></x.y.z>被跟踪

Flags可以是一个原子,也可以是flags列表. 

s (send)
跟踪进程发送的消息
r (receive)
跟踪进程接收的消息
m (messages)
跟踪进程接收和发送的消息
c (call)
依照系统定义的跟踪模式,来跟踪此进程关于全局函数的调用情况(见 tp/2).
p (procs)
跟踪与此进程相关的事件
sos (set on spawn)
让所有由当前被跟踪进程所创建的子进程,都继承其flags.
sol (set on link)
每当被跟踪进程链至P2时, 让P2继承其flags
sofs (set on first spawn)
sos相同,但只有第一个子进程会继承.
sofl (set on first link)
sol相同,但只会在第一次调用link/1时跟踪
all
所有flags都设上
clear
清除所有flags


erts 的Match Specification in Erlang这章详细说明了MatchSpec

to be continued...
分享到:
评论

相关推荐

    opentracing-util-0.33.0-API文档-中文版.zip

    赠送jar包:opentracing-util-0.33.0.jar 赠送原API文档:opentracing-util-0.33.0-javadoc.jar 赠送源代码:opentracing-util-0.33.0-...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    chrome://tracing说明

    Chrome Tracing 打开 about:tracing 页面,Chrome 提供的底层的追踪工具允许我们深度了解 V8 的解析以及其他时间消耗情况。V8 也提供了 详细的指南 来介绍如何使用这个功能。

    ray tracing in one weekend

    标题《Ray Tracing in One Weekend》和描述表明,这是一本关于光线追踪技术(ray tracing)的入门书籍,作者是Peter Shirley。作者分享了这本书,并说明读者可以在一个周末内学习基础的光线追踪技术。这本书被归类在...

    opentracing-noop-0.33.0.jar

    opentracing-api

    opentracing-noop-0.31.0.jar

    opentracing-noop-0.31.0.jar

    opentracing-api-0.33.0-API文档-中文版.zip

    赠送jar包:opentracing-api-0.33.0.jar 赠送原API文档:opentracing-api-0.33.0-javadoc.jar 赠送源代码:opentracing-api-0.33.0-...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    opentracing-util-0.33.0-API文档-中英对照版.zip

    赠送jar包:opentracing-util-0.33.0.jar; 赠送原API文档:opentracing-util-0.33.0-javadoc.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。

    Peter Shirley Ray Tracing系列合集

    Peter Shirley Ray Tracing合集(包含Ray Tracing in One Weekend, Ray Tracing the Next Week, Ray Tracing The Rest of Your Life, Realistic Ray Tracing)

    前端项目-tracing.js.zip

    `tracing.js`就是这样一个工具,它作为一个库或实用程序,专为开发者提供了强大的追踪和调试功能。下面我们将深入探讨`tracing.js`的核心概念、功能以及如何在实际项目中应用。 `tracing.js`的核心思想是通过提供...

    Python-OpenTracing官方标准中文版

    OpenTracing是一个跨语言、跨平台的项目,它定义了一套API,允许开发者在应用代码中插入追踪信息,以便于监控和调试复杂的分布式系统。 分布式追踪的核心概念包括`Span`和`Tracer`。`Span`是工作单元,代表着一个...

    Ray Tracing(光线追踪)的三本英文参考文献(PDF版)

    1. **《Ray Tracing: The Rest of Your Life》**:这本书可能涵盖了光线追踪的基础概念,包括如何构建场景、定义材质、计算光照以及反射和折射。作者可能详细解释了如何追踪从相机到场景物体的主光线,并追踪由这些...

    Ray Tracing in a Weekend(中文版)

    《Ray Tracing in a Weekend》中文版是一个面向初学者的光线追踪教程。光线追踪是电影和视频游戏制作中不可或缺的技术,它通过模拟光线在三维场景中的行为来生成高度逼真的图像。然而,由于其复杂的数学计算和算法,...

    opentracing-java,Java的OpenCAPI.zip

    OpenTracing是一个跨语言的分布式追踪系统,它提供了一种标准化的方式来收集和分析微服务架构中的请求传播数据。在Java环境中,`opentracing-java`是实现OpenTracing API的一个库,它允许开发者在Java应用中集成...

    Distribution Ray Tracing: Theory and Practice

    Distribution ray tracing uses Monte Carlo integration to solve the rendering equation. This technique was introduced by Cook et. al, and was notable because of its simplicity and its ability to ...

    opentracing-api-0.33.0-API文档-中英对照版.zip

    赠送jar包:opentracing-api-0.33.0.jar; 赠送原API文档:opentracing-api-0.33.0-javadoc.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。

    Ray Tracing in One Weekend, Ray Tracing The Next Week,

    Ray Tracing in One Weekend, Ray Tracing The Next Week, Ray Tracing The Rest of Your Life 三本关于射线追踪的资料,简单易懂,容易上手。并附有源程序

    An Introduction to Ray Tracing

    An Introduction to Ray Tracing

    Python-tracing用于逐行跟踪程序执行的实用程序

    `tracing`是一个实用的工具,它允许开发者逐行跟踪程序的执行过程,这对于理解代码逻辑、查找错误和优化性能非常有帮助。本文将深入探讨`tracing`在Python中的应用以及如何使用它来提升开发效率。 首先,让我们理解...

    dotnet-Tracing描图AppforWindows10

    1. **事件追踪(Event Tracing for Windows, ETW)**:ETW是Windows操作系统内核提供的一个高效、低开销的追踪机制,开发者可以通过它来收集系统和应用的运行时信息,用于诊断和性能分析。 2. **.NET Framework的...

Global site tag (gtag.js) - Google Analytics