aboutsummaryrefslogtreecommitdiffstats
path: root/erts/preloaded/src/erl_tracer.erl
blob: 2177e48f602ecee8dd7b18e97a380a74c5723663 (plain) (blame)
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).