class TracePoint

一个类,以结构化的面向对象 API 提供 Kernel#set_trace_func 的功能。

示例

使用 TracePoint 来专门收集异常信息

trace = TracePoint.new(:raise) do |tp|
  p [tp.lineno, tp.event, tp.raised_exception]
end
#=> #<TracePoint:disabled>

trace.enable  #=> false

0 / 0
#=> [5, :raise, #<ZeroDivisionError: divided by 0>]

事件

如果您没有指定要监听的事件类型,TracePoint 将包含所有可用的事件。

注意: 不要依赖当前的事件集,因为此列表可能会更改。建议您指定要使用的事件类型。

要过滤跟踪内容,您可以将以下任何内容作为 events 传递

:line

在新行上执行表达式或语句。

:class

开始一个类或模块定义。

:end

完成一个类或模块定义。

:call

调用一个 Ruby 方法。

:return

从一个 Ruby 方法返回。

:c_call

调用一个 C 语言例程。

:c_return

从一个 C 语言例程返回。

:raise

抛出一个异常。

:rescue

捕获一个异常。

:b_call

块入口处的事件钩子。

:b_return

块结束处的事件钩子。

:a_call

所有调用处的事件钩子(callb_callc_call)。

:a_return

所有返回处的事件钩子(returnb_returnc_return)。

:thread_begin

线程开始时的事件钩子。

:thread_end

线程结束时的事件钩子。

:fiber_switch

纤程切换时的事件钩子。

:script_compiled

编译新的 Ruby 代码(使用 evalloadrequire)。