diff --git a/c_src/tracer/tpTracerNif.c b/c_src/tracer/tpTracerNif.c index 540b513..866ead2 100644 --- a/c_src/tracer/tpTracerNif.c +++ b/c_src/tracer/tpTracerNif.c @@ -71,7 +71,6 @@ static void unload(ErlNifEnv* env, void* priv_data) } // enabled(TraceTag, TracerState, Tracee) - static ERL_NIF_TERM enabled(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]) { ERL_NIF_TERM tracers, value; ErlNifPid tracer; @@ -139,6 +138,11 @@ static ERL_NIF_TERM enabled_send(ErlNifEnv *env, int argc, const ERL_NIF_TERM ar // trace(TraceTag, TracerState, Tracee, TraceTerm, Opts) static ERL_NIF_TERM trace(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]) { + + for(int i = 0; i <= argc - 1; i++) { + enif_fprintf(stdout, "IMY************trace000 %T\n", argv[i]); + } + ERL_NIF_TERM tracers, head, ts, extra, mspec, msg; ErlNifPid tracer; unsigned int nth; diff --git a/src/eTpf.erl b/src/eTpf.erl index ae072bc..86d54f3 100644 --- a/src/eTpf.erl +++ b/src/eTpf.erl @@ -78,7 +78,7 @@ ensureScope(Input) -> traceInput([], _, _) -> ok; -traceInput([{scope, Scope} | Tail], TracerState, Opts) -> +traceInput([{scope, Scope} | Tail], TracerState, TraceOpts) -> %% We currently enable the following trace flags: %% - call: function calls %% - procs: process exit events; plus others we ignore @@ -90,15 +90,16 @@ traceInput([{scope, Scope} | Tail], TracerState, Opts) -> %% %% @todo It might be useful to count the number of sends %% or receives a function does. - ExtraFlags = [running || maps:get(running, Opts, false)] ++ [send || maps:get(send, Opts, false)], + ExtraFlags = [running || maps:get(running, TraceOpts, false)] ++ [send || maps:get(send, TraceOpts, false)], [ - erlang:trace(PidPortSpec, true, [call, procs, timestamp, arity, return_to, set_on_spawn, {tracer, tpTracerNif, TracerState} | ExtraFlags]) - || PidPortSpec <- Scope + begin + erlang:trace(PidPortSpec, true, [call, procs, monotonic_timestamp, arity, return_to, set_on_spawn, {tracer, tpTracerNif, TracerState} | ExtraFlags]) + end || PidPortSpec <- Scope ], - traceInput(Tail, TracerState, Opts); -traceInput([Mod | Tail], TracerState, Opts) when is_atom(Mod) -> + traceInput(Tail, TracerState, TraceOpts); +traceInput([Mod | Tail], TracerState, TraceOpts) when is_atom(Mod) -> MatchSpec = - case Opts of + case TraceOpts of #{process_dump := true} -> [{'_', [], [{message, {process_dump}}]}]; _ -> @@ -107,7 +108,7 @@ traceInput([Mod | Tail], TracerState, Opts) when is_atom(Mod) -> %% The module must be loaded before we attempt to trace it. _ = code:ensure_loaded(Mod), _ = erlang:trace_pattern({Mod, '_', '_'}, MatchSpec, [local]), - traceInput(Tail, TracerState, Opts). + traceInput(Tail, TracerState, TraceOpts). stop() -> stop(?eTpfPoolId).