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

Fiber 切换处的事件挂钩。

:script_compiled

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