【问题标题】:How to print out all data tracked by Erlang dbg如何打印出 Erlang dbg 跟踪的所有数据
【发布时间】:2017-04-16 14:12:00
【问题描述】:

我想使用 dbg:tracer 跟踪 Erlang GC 的所有行为并打印出跟踪的事件。

1> dbg:tracer().
2> dbg:p(self(), [garbage_collection]).
3> my_module:function([Args]).
4> dbg:stop().
5> dbg:show_trace().
...

我只想在执行my_module:function/0 函数调用期间跟踪垃圾收集。一旦函数返回跟踪应该停止。

【问题讨论】:

  • 你能解释一下你显示的命令的问题吗?什么都没有打印出来?还有你使用的是哪个版本的 Erlang?
  • 我知道我可以使用第 2 行跟踪 Erlang GC,但实际上我想在第 3 行执行期间跟踪 GC 行为。我该怎么做?第二个问题是在停止跟踪过程之后(第 4 行,如何打印出跟踪的数据?
  • fvarj 如果我的回答解决了您的问题,请告诉我。
  • @Stratus3D 谢谢大家的帮助,它可以工作 o/

标签: debugging erlang trace


【解决方案1】:

可能有更好的方法来做到这一点,但我建议在您关心的功能返回后立即关闭跟踪。像这样的东西应该可以工作:

1> dbg:tracer().
2> GcOfMyModule = fun() ->
    dbg:p(self(), [garbage_collection]),
    my_module:function([Args]),
    dbg:stop()
end
3> GcOfMyModule().
5> dbg:show_trace().

dbg:p/2my_module:function/1dbg:stop/0 调用全部封装在一个函数中意味着每个函数将在它之前的函数之后立即执行。我最初是从这个答案的最后一部分得到的想法,它需要在一定数量的事件https://stackoverflow.com/a/1954980/1245380 之后自动停止跟踪。

【讨论】:

    猜你喜欢
    • 2015-11-07
    • 2020-11-13
    • 1970-01-01
    • 2010-12-29
    • 2016-11-16
    • 2014-05-09
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    相关资源
    最近更新 更多