1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
-module(erl_tracer).
-export([enabled/3, trace/6, on_load/0]).
-type tracee() :: port() | pid() | undefined.
-type trace_tag() :: send | send_to_non_existing_process | 'receive' |
call | return_to | return_from | exception_from |
spawn | spawned | exit | link | unlink | getting_linked |
getting_unlinked | register | unregister | in | out |
in_exiting | out_exiting | out_exited |
open | closed | gc_start | gc_end.
-type trace_opts() :: #{ match_spec_result => true | term(),
scheduler_id => undefined | non_neg_integer(),
timestamp => undefined | timestamp | cpu_timestamp |
monotonic | strict_monotonic }.
-type tracer_state() :: term().
on_load() ->
case erlang:load_nif(atom_to_list(?MODULE), 0) of
ok -> ok
end.
%%%
%%% NIF placeholders
%%%
-spec enabled(Tag :: trace_tag() | seq_trace | trace_status,
TracerState :: tracer_state(),
Tracee :: tracee()) ->
trace | discard | remove.
enabled(_, _, _) ->
erlang:nif_error(nif_not_loaded).
-spec trace(Tag :: trace_tag() | seq_trace,
TracerState :: tracer_state(),
Tracee :: tracee(),
Msg :: term(),
Extra :: term(),
Opts :: trace_opts()) -> any().
trace(_, _, _, _, _, _) ->
erlang:nif_error(nif_not_loaded).
|