代码不必用特殊的标记(比如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}]}]
代码
- 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...
分享到:
相关推荐
赠送jar包:opentracing-util-0.33.0.jar 赠送原API文档:opentracing-util-0.33.0-javadoc.jar 赠送源代码:opentracing-util-0.33.0-...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
Chrome Tracing 打开 about:tracing 页面,Chrome 提供的底层的追踪工具允许我们深度了解 V8 的解析以及其他时间消耗情况。V8 也提供了 详细的指南 来介绍如何使用这个功能。
标题《Ray Tracing in One Weekend》和描述表明,这是一本关于光线追踪技术(ray tracing)的入门书籍,作者是Peter Shirley。作者分享了这本书,并说明读者可以在一个周末内学习基础的光线追踪技术。这本书被归类在...
opentracing-api
opentracing-noop-0.31.0.jar
赠送jar包:opentracing-api-0.33.0.jar 赠送原API文档:opentracing-api-0.33.0-javadoc.jar 赠送源代码:opentracing-api-0.33.0-...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
赠送jar包:opentracing-util-0.33.0.jar; 赠送原API文档:opentracing-util-0.33.0-javadoc.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。
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`就是这样一个工具,它作为一个库或实用程序,专为开发者提供了强大的追踪和调试功能。下面我们将深入探讨`tracing.js`的核心概念、功能以及如何在实际项目中应用。 `tracing.js`的核心思想是通过提供...
OpenTracing是一个跨语言、跨平台的项目,它定义了一套API,允许开发者在应用代码中插入追踪信息,以便于监控和调试复杂的分布式系统。 分布式追踪的核心概念包括`Span`和`Tracer`。`Span`是工作单元,代表着一个...
1. **《Ray Tracing: The Rest of Your Life》**:这本书可能涵盖了光线追踪的基础概念,包括如何构建场景、定义材质、计算光照以及反射和折射。作者可能详细解释了如何追踪从相机到场景物体的主光线,并追踪由这些...
《Ray Tracing in a Weekend》中文版是一个面向初学者的光线追踪教程。光线追踪是电影和视频游戏制作中不可或缺的技术,它通过模拟光线在三维场景中的行为来生成高度逼真的图像。然而,由于其复杂的数学计算和算法,...
OpenTracing是一个跨语言的分布式追踪系统,它提供了一种标准化的方式来收集和分析微服务架构中的请求传播数据。在Java环境中,`opentracing-java`是实现OpenTracing API的一个库,它允许开发者在Java应用中集成...
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 ...
赠送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 The Rest of Your Life 三本关于射线追踪的资料,简单易懂,容易上手。并附有源程序
An Introduction to Ray Tracing
`tracing`是一个实用的工具,它允许开发者逐行跟踪程序的执行过程,这对于理解代码逻辑、查找错误和优化性能非常有帮助。本文将深入探讨`tracing`在Python中的应用以及如何使用它来提升开发效率。 首先,让我们理解...
1. **事件追踪(Event Tracing for Windows, ETW)**:ETW是Windows操作系统内核提供的一个高效、低开销的追踪机制,开发者可以通过它来收集系统和应用的运行时信息,用于诊断和性能分析。 2. **.NET Framework的...