@ -43,13 +43,13 @@
- compile ( [ export_all , nowarn_export_all ] ) .
sts ( ) - >
trace ( [ { app , eSync } , { scope , [ whereis ( esSyncSrv ) ] } ] ) .
trace ( [ self ( ) , whereis ( esSyncSrv ) ] , [ call , return_to ] , [ { test , '_' , '_' } , { app , eSync } ] , tpTracerShell , #{ } , #{ } ) .
sts1 ( ) - >
trace ( [ test , { scope , [ self ( ) ] } ] ) .
stl ( ) - >
trace ( [ test , { scope , [ self ( ) ] } ] , tpTracerLog ) .
trace ( self ( ) , [ all ] , [ { test , '_' , '_' } ] , tpTracerLog , #{ } , #{ } ) .
stf ( ) - >
trace ( [ { app , eSync } , { scope , [ whereis ( esSyncSrv ) ] } ] , tpTracerFile ) .
@ -116,7 +116,7 @@ trace(PidPortSpec, TracerMod) ->
- spec trace ( pidPortSpec ( ) , module ( ) , tracerOpts ( ) ) - > ok .
trace ( PidPortSpec , TracerMod , TracerOpts ) - >
trace ( PidPortSpec , [ all ] , [ { '_' , '_' , '_' } ], TracerMod , TracerOpts , #{ } ) .
trace ( PidPortSpec , [ all ] , [ ] , TracerMod , TracerOpts , #{ } ) .
- spec trace ( pidPortSpec ( ) , flagList ( ) , pattern ( ) , module ( ) , tracerOpts ( ) , traceOpts ( ) ) - > ok .
trace ( PidPortSpec , FlagList , TraceMods , TracerMod , TracerOpts , TraceOpts ) - >
@ -137,16 +137,31 @@ doTrace(PidPortSpec, FlagList, TraceMods, TracerMod, TracerOpts, TraceOpts) ->
case supervisor : start_child ( eTpf_sup , TracerSpec ) of
{ ok , TracerPid } - >
LastTraceMods = flattenMods ( TraceMods , [ ] ) ,
traceInput ( PidPortSpec , FlagList , LastTraceMods , TracerPid , TraceOpts ) ,
TraceMFAs = flattenMods ( TraceMods , [ ] ) ,
% 每 个 进 程 只 能 由 一 个 tracer进行跟踪 。 因 此 , 跟 踪 已 跟 踪 进 程 会 失 败 。
[
begin
erlang : trace ( OnePidPortSpec , true , [ { tracer , tpTracerNif , TracerPid } | FlagList ] )
end | | OnePidPortSpec < - PidPortSpec
] ,
PtFlags = maps : get ( FlagList , TraceOpts , [ local ] ) ,
MatchSpec = ? IIF ( maps : get ( stackTc , TraceOpts , false ) , [ { '_' , [ ] , [ { message , { process_dump } } ] } ] , true ) ,
[
begin
% % The module must be loaded before we attempt to trace it .
_ = code : ensure_loaded ( M ) ,
_ = erlang : trace_pattern ( OneTraceMFA , MatchSpec , PtFlags )
end | | { M , _ F , _ A } = OneTraceMFA < - TraceMFAs
] ,
ok ;
_ Err - >
io : format ( " trace start error ~p ~n " , [ _ Err ] )
end .
flattenMods ( [ ] , Acc ) - >
AllMFA = lists : flatten ( Acc ) ,
? IIF ( AllMFA == [ ] , [ { '_' , '_' , '_' } ] , AllMFA ) ;
lists : flatten ( Acc ) ;
flattenMods ( [ { callback , Mod , Fun } | Tail ] , Acc ) when is_atom ( Mod ) , is_atom ( Fun ) - >
Input = flattenMods ( Mod : Fun ( ) , [ ] ) ,
flattenMods ( Tail , [ Input | Acc ] ) ;
@ -158,25 +173,4 @@ flattenMods([{app, App} | Tail], Acc) when is_atom(App) ->
flattenMods ( [ { _ , _ , _ } = MFA | Tail ] , Acc ) - >
flattenMods ( Tail , [ MFA | Acc ] ) ;
flattenMods ( [ OneMod | Tail ] , Acc ) - >
flattenMods ( Tail , [ { OneMod , '_' , '_' } | Acc ] ) .
traceInput ( PidPortSpec , FlagList , TraceMFAs , TracerState , TraceOpts ) - >
% 每 个 进 程 只 能 由 一 个 tracer进行跟踪 。 因 此 , 跟 踪 已 跟 踪 进 程 会 失 败 。
[
begin
erlang : trace ( OnePidPortSpec , true , [ { tracer , tpTracerNif , TracerState } | FlagList ] )
end | | OnePidPortSpec < - PidPortSpec
] ,
PtFlags = maps : get ( FlagList , TraceOpts , [ local ] ) ,
MatchSpec = ? IIF ( maps : get ( stackTc , TraceOpts , false ) , [ { '_' , [ ] , [ { message , { process_dump } } ] } ] , true ) ,
[
begin
% % The module must be loaded before we attempt to trace it .
_ = code : ensure_loaded ( M ) ,
io : format ( " IMY****************** ~p ~n " , [ OneTraceMFA ] ) ,
_ = erlang : trace_pattern ( OneTraceMFA , MatchSpec , PtFlags )
end | | { M , _ F , _ A } = OneTraceMFA < - TraceMFAs
] ,
ok .
flattenMods ( Tail , [ { OneMod , '_' , '_' } | Acc ] ) .