소스 검색

ft: 代码修改

master
SisMaker 3 년 전
부모
커밋
1adfc265ef
5개의 변경된 파일46개의 추가작업 그리고 37개의 파일을 삭제
  1. +15
    -11
      src/eTpf.erl
  2. +7
    -6
      src/tracer/tpTracerFile.erl
  3. +5
    -4
      src/tracer/tpTracerLog.erl
  4. +5
    -4
      src/tracer/tpTracerShell.erl
  5. +14
    -12
      src/tracer/tpTracerSocket.erl

+ 15
- 11
src/eTpf.erl 파일 보기

@ -39,7 +39,7 @@
]).
sts() ->
trace([{scope, [all]}]).
trace([{app, eSync}, {scope, [ whereisan>(esSyncSrv)]}]).
stl() ->
trace([{app, eSync}, {scope, [new_processes]}], tpTracerLog).
@ -114,20 +114,23 @@ doTrace(InputList, TracerMod, TracerOpts, TraceOpts) ->
_ = application:ensure_all_started(eTpf),
TracerId = maps:get(tracerId, TraceOpts, ?eTpfTracerId),
{ok , TracerPid} = supervisor:start_child(eTpf_sup, #{
case supervisor:start_child(eTpf_sup, #{
id => TracerId,
start => {TracerMod, start_link, [TracerOpts]},
restart => temporary,
type => worker,
shutdown => infinity
}),
_Mode = maps:get(mode, TraceOpts, trace),
Tem0InputList = flattenInput(InputList, []),
Tem1InputList = ensurePattern(Tem0InputList),
LastInputList = ensureScope(Tem1InputList),
traceInput(LastInputList, TracerPid, TraceOpts),
ok.
}) of
{ok, TracerPid} ->
_Mode = maps:get(mode, TraceOpts, trace),
Tem0InputList = flattenInput(InputList, []),
Tem1InputList = ensurePattern(Tem0InputList),
LastInputList = ensureScope(Tem1InputList),
traceInput(LastInputList, TracerPid, TraceOpts),
ok;
_Err ->
io:format("trace start error ~p~n", [_Err])
end.
flattenInput([], Acc) ->
lists:flatten(Acc);
@ -185,7 +188,7 @@ traceInput([{scope, Scope} | Tail], TracerState, TraceOpts) ->
[
begin
%erlang:trace(PidPortSpec, true, [call, procs, arity, return_to, set_on_spawn, {tracer, tpTracerNif, TracerState} | ExtraFlags])
erlang:trace(PidPortSpec, true, [procs, send, 'receive', running, exiting, arity, set_on_spawn, {tracer, tpTracerNif, TracerState}])
erlang:trace(PidPortSpec, true, [call, procs, arity, send, 'receive', running, exiting, set_on_spawn, {tracer, tpTracerNif, TracerState}])
end || PidPortSpec <- Scope
],
traceInput(Tail, TracerState, TraceOpts);
@ -199,5 +202,6 @@ traceInput([Mod | Tail], TracerState, TraceOpts) when is_atom(Mod) ->
end,
%% The module must be loaded before we attempt to trace it.
_ = code:ensure_loaded(Mod),
io:format("IMY****************** ~p~n", [Mod]),
_ = erlang:trace_pattern({Mod, '_', '_'}, MatchSpec, [local]),
traceInput(Tail, TracerState, TraceOpts).

+ 7
- 6
src/tracer/tpTracerFile.erl 파일 보기

@ -4,6 +4,7 @@
-export([
start_link/1
, init/2
, loop/1
]).
%% sys callbacks
@ -61,7 +62,7 @@ init(Parent, TracerOpts) ->
, fMaxMsg = maps:get(fMaxMsg, TracerOpts, 150)
, tcmIsCut = TcmIsCut
},
loop(State).
?n>MODULE:loop(State).
loop(#state{parent = Parent, size = Size, fDir = FDir, fBaseName = FBaseName, ioDevice = IoDevice, fMaxSize = MaxSize, tcmIsCut = TcmIsCut, fMaxMsg = FMaxMsg, msgCnt = MsgCnt, msgList = MsgList} = State) ->
receive
@ -86,17 +87,17 @@ loop(#state{parent = Parent, size = Size, fDir = FDir, fBaseName = FBaseName, io
ok = file:close(IoDevice),
Filename = fileName(FDir, FBaseName),
{ok, NewIoDevice} = file:open(Filename, [write, raw]),
loop(State#state{ioDevice = NewIoDevice, size = 0, msgCnt = 0, msgList = []});
?n>MODULE:loop(State#state{ioDevice = NewIoDevice, size = 0, msgCnt = 0, msgList = []});
_ ->
loop(State#state{size = NewSize, msgCnt = 0, msgList = []})
?n>MODULE:loop(State#state{size = NewSize, msgCnt = 0, msgList = []})
end;
_ ->
loop(State#state{msgCnt = NewMsgCnt, msgList = NewMsgList})
?n>MODULE:loop(State#state{msgCnt = NewMsgCnt, msgList = NewMsgList})
end
end.
system_continue(_, _, State) ->
loop(State).
?n>MODULE:loop(State).
-spec system_terminate(any(), _, _, #state{}) -> no_return().
system_terminate(Reason, _, _, State) ->
@ -120,4 +121,4 @@ fileName(Dir, FBaseName) ->
FileName = <<TimeStr/binary, FBaseName/binary>>,
WholeName = filename:absname(filename:join(Dir, FileName)),
ok = filelib:ensure_dir(WholeName),
WholeName.
WholeName .

+ 5
- 4
src/tracer/tpTracerLog.erl 파일 보기

@ -4,6 +4,7 @@
-export([
start_link/1
, init/2
, loop/1
]).
%% sys callbacks
@ -57,7 +58,7 @@ init(Parent, TracerOpts) ->
, fMaxSize = maps:get(fMaxSize, TracerOpts, 52428800)
, tcmIsCut = TcmIsCut
},
loop(State).
?n>MODULE:loop(State).
loop(#state{parent = Parent, fDir = FDir, fBaseName = FBaseName, size = Size, ioDevice = IoDevice, fMaxSize = MaxSize, tcmIsCut = TcmIsCut} = State) ->
receive
@ -75,14 +76,14 @@ loop(#state{parent = Parent, fDir = FDir, fBaseName = FBaseName, size = Size, io
ok = file:close(IoDevice),
Filename = fileName(FDir, FBaseName),
{ok, NewIoDevice} = file:open(Filename, [write, raw]),
loop(State#state{size = 0, ioDevice = NewIoDevice});
?n>MODULE:loop(State#state{size = 0, ioDevice = NewIoDevice});
_ ->
loop(State#state{size = NewSize})
?n>MODULE:loop(State#state{size = NewSize})
end
end.
system_continue(_, _, State) ->
loop(State).
?n>MODULE:loop(State).
-spec system_terminate(any(), _, _, #state{}) -> no_return().
system_terminate(Reason, _, _, State) ->

+ 5
- 4
src/tracer/tpTracerShell.erl 파일 보기

@ -18,19 +18,20 @@ start_link(_TracerOpts) ->
init(Parent) ->
process_flag(message_queue_data, off_heap),
loop(Parent).
?n>MODULE:loop(Parent).
loop(Parent) ->
receive
{system, From, Request} ->
sys:handle_system_msg(Request, From, Parent, ?MODULE, [], Parent);
RMsg ->
erlang:display(RMsg),
loop(Parent)
io:format("~10000p\n", [RMsg]),
%erlang:display(RMsg),
?MODULE:loop(Parent)
end.
system_continue(_, _, Parent) ->
loop(Parent).
?n>MODULE:loop(Parent).
-spec system_terminate(any(), _, _, _) -> no_return().
system_terminate(Reason, _, _, _) ->

+ 14
- 12
src/tracer/tpTracerSocket.erl 파일 보기

@ -3,6 +3,8 @@
-export([
start_link/1
, init/2
, accept_loop/2
, trace_loop/2
]).
%% sys callbacks
@ -31,7 +33,7 @@ init(Parent, Port) ->
accept(State = #state{lSocket = LSocket}) ->
{ok, AcceptRef} = prim_inet:async_accept(LSocket, -1),
accept_loop(State, AcceptRef).
?n>MODULE:accept_loop(State, AcceptRef).
accept_loop(State = #state{parent = Parent, lSocket = LSocket}, AcceptRef) ->
receive
@ -40,13 +42,13 @@ accept_loop(State = #state{parent = Parent, lSocket = LSocket}, AcceptRef) ->
{'EXIT', Parent, Reason} ->
exit(Reason);
{inet_async, LSocket, AcceptRef, {ok, CSocket}} ->
trace_loop(set_timeout(State), CSocket);
?n>MODULE:trace_loop(set_timeout(State), CSocket);
{inet_async, LSocket, AcceptRef, Error} ->
exit({accept_error, Error});
_ ->
%% We discard all trace events when no client is connected.
%% We may also end up discarding old timeouts or TCP messages.
accept_loop(State, AcceptRef)
?n>MODULE:accept_loop(State, AcceptRef)
end.
trace_loop(State = #state{parent = Parent, timerRef = TRef}, CSocket) ->
@ -57,7 +59,7 @@ trace_loop(State = #state{parent = Parent, timerRef = TRef}, CSocket) ->
sys:handle_system_msg(Request, From, Parent, ?MODULE, [], {trace_loop, State, CSocket});
%% Reset the timeout when we receive data.
{tcp, CSocket, _} ->
trace_loop(reset_timeout(State), CSocket);
?n>MODULE:trace_loop(reset_timeout(State), CSocket);
{tcp_closed, CSocket} ->
close(State, CSocket);
{tcp_error, CSocket, _} ->
@ -66,26 +68,26 @@ trace_loop(State = #state{parent = Parent, timerRef = TRef}, CSocket) ->
close(State, CSocket);
%% Discard the non-blocking send reply when successful.
{inet_reply, CSocket, ok} ->
trace_loop(State, CSocket);
?n>MODULE:trace_loop(State, CSocket);
%% And close the socket when an error occured.
{inet_reply, CSocket, _} ->
close(State, CSocket);
%% Discard TCP messages from closed sockets.
{tcp, _, _} ->
trace_loop(State, CSocket);
?n>MODULE:trace_loop(State, CSocket);
{tcp_closed, _} ->
trace_loop(State, CSocket);
?n>MODULE:trace_loop(State, CSocket);
{tcp_error, _, _} ->
trace_loop(State, CSocket);
?n>MODULE:trace_loop(State, CSocket);
%% Discard any previous timeout.
{timeout, _, ?MODULE} ->
trace_loop(State, CSocket);
?n>MODULE:trace_loop(State, CSocket);
Msg ->
Bin = term_to_binary(Msg),
_ = byte_size(Bin),
case erlang:port_command(CSocket, <<Bin/binary>>, [nosuspend]) of
true ->
trace_loop(State, CSocket);
?n>MODULE:trace_loop(State, CSocket);
%% The send buffer is full.
false ->
close(State, CSocket)
@ -99,9 +101,9 @@ close(State, CSocket) ->
system_continue(_, _, {LoopTag = accept_loop, State, LoopArgs}) ->
case LoopTag of
accept_loop ->
accept_loop(State, LoopArgs);
?n>MODULE:accept_loop(State, LoopArgs);
trace_loop ->
trace_loop(State, LoopArgs)
?n>MODULE:trace_loop(State, LoopArgs)
end.
-spec system_terminate(any(), _, _, _) -> no_return().

불러오는 중...
취소
저장