Skip to content

Commit 639e0b2

Browse files
Håkan MattssonErlang/OTP
Håkan Mattsson
authored and
Erlang/OTP
committed
OTP-8058 The GUI parts are rewritten to use wxWidgets. Thanks Olle
Mattsson! For the time being it is still possible to use the old GS based version of the tool, but it is deprecated. The wxWidgets based version is started by default. A new tutorial has been added to the documentation. It is based on Jayson Vantuyl's article http://souja.net/2009/04/making-sense-of-erlangs-event-tracer.htm l. The functions et:trace_me/4 and et:trace_me/5 has been introduced in order to replace the deprecated functions et:report_event/4 and et:report_event/5. Hopefully the new names makes it a little more obvious what the intended usage of the functions are. A print function has been added to the GUI, in order to enable printing of sequence charts. More functionality for hiding unwanted events has been added to the GUI. The max_events, hide_unknown and display_mode configuration parameters to et_viewer is not used any more. Now the event cache in the Viewer only contains those events that actually are displayed in the GUI. Some minor bugs has been fixed. Such as a cleaning up trace patterns at termination and displaying events with detail level 100.
1 parent 45f6d10 commit 639e0b2

7 files changed

+30
-15
lines changed

lib/et/doc/src/et_selector.xml

+2-2
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
<type>
4545
<v>RawPattern = detail_level()</v>
4646
<v>TracePattern = erlang_trace_pattern_match_spec()</v>
47-
<v>detail_level() = min | max | integer(X) when X =&lt; 0, X >= 100</v>
47+
<v>detail_level() = min | max | integer(X) when X &gt;= 0, X =&lt; 100</v>
4848
</type>
4949

5050
<desc>
@@ -65,7 +65,7 @@
6565

6666
<type>
6767
<v>Pattern = detail_level() | empty_match_spec() | erlang_trace_pattern_match_spec()</v>
68-
<v>detail_level() = min | max | integer(X) when X =&lt;0, X >= 100</v>
68+
<v>detail_level() = min | max | integer(X) when X &gt;= 0, X =&lt; 100</v>
6969
<v>empty_match_spec() = [] </v>
7070
</type>
7171

lib/et/doc/src/et_tutorial.xmlsrc

+1-1
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@
5656
<p>The number (in this case 85) is an integer from 1 to 100 that
5757
specifies the "detail level" of the message. The higher the
5858
number, the more important it is. This provides a crude form of
59-
priority filtering. Avoid using 100.</p>
59+
priority filtering.</p>
6060

6161
<p>The <c>from</c>, <c>to</c>, and <c>message</c> parameters are
6262
exactly what they sound like. <c>from</c> and <c>to</c> are

lib/et/src/et_collector.erl

+20-4
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,9 @@
5757
multicast/2
5858
]).
5959

60+
%% Internal export
61+
-export([monitor_trace_port/2]).
62+
6063
%% gen_server callbacks
6164
-export([init/1,terminate/2, code_change/3,
6265
handle_call/3, handle_cast/2, handle_info/2]).
@@ -144,7 +147,7 @@
144147
%%
145148
%% event_order() = trace_ts | event_ts
146149
%% trace_pattern() = detail_level() | dbg_match_spec()
147-
%% detail_level() = min | max | integer(X) when X =< 0, X >= 100
150+
%% detail_level() = min | max | integer(X) when X >= 0, X =< 100
148151
%% trace_client() =
149152
%% {event_file, file_name()} |
150153
%% {dbg_trace_type(), dbg_trace_parameters()}
@@ -415,7 +418,9 @@ report_event(CollectorPid, DetailLevel, FromTo, Label, Contents) ->
415418
report_event(CollectorPid, DetailLevel, FromTo, FromTo, Label, Contents).
416419

417420
report_event(CollectorPid, DetailLevel, From, To, Label, Contents)
418-
when is_integer(DetailLevel), DetailLevel >= 0, DetailLevel =< 100 ->
421+
when is_integer(DetailLevel),
422+
DetailLevel >= ?detail_level_min,
423+
DetailLevel =< ?detail_level_max ->
419424
TS= erlang:now(),
420425
E = #event{detail_level = DetailLevel,
421426
trace_ts = TS,
@@ -681,6 +686,17 @@ trace_spec_wrapper(EventFun, EndFun, EventInitialAcc)
681686
start_trace_port(Parameters) ->
682687
dbg:tracer(port, dbg:trace_port(ip, Parameters)).
683688

689+
monitor_trace_port(CollectorPid, Parameters) ->
690+
Res = start_trace_port(Parameters),
691+
spawn(fun() ->
692+
MonitorRef = erlang:monitor(process, CollectorPid),
693+
receive
694+
{'DOWN', MonitorRef, _, _, _} ->
695+
dbg:stop_clear()
696+
end
697+
end),
698+
Res.
699+
684700
%%----------------------------------------------------------------------
685701
%% iterate(Handle, Prev, Limit) ->
686702
%% iterate(Handle, Prev, Limit, undefined, Prev)
@@ -1033,7 +1049,7 @@ handle_call(clear_table, _From, S) ->
10331049
handle_call(stop, _From, S) ->
10341050
do_multicast(S#state.subscribers, close),
10351051
case S#state.trace_global of
1036-
true -> rpc:multicall(S#state.trace_nodes, dbg, stop, []);
1052+
true -> rpc:multicall(S#state.trace_nodes, dbg, stop_clear, []);
10371053
false -> ignore
10381054
end,
10391055
{stop, shutdown, ok, S};
@@ -1067,7 +1083,7 @@ handle_info(timeout, S) ->
10671083
handle_info({nodeup, Node}, S) ->
10681084
Port = S#state.trace_port,
10691085
MaxQueue = S#state.trace_max_queue,
1070-
case rpc:call(Node, ?MODULE, start_trace_port, [{Port, MaxQueue}]) of
1086+
case rpc:call(Node, ?MODULE, monitor_trace_port, [self(), {Port, MaxQueue}]) of
10711087
{ok, _} ->
10721088
S2 = listen_on_trace_port(Node, Port, S),
10731089
noreply(S2);

lib/et/src/et_gs_viewer.erl

-2
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,6 @@
7575
-define(incr_x, 60).
7676
-define(initial_y, 15).
7777
-define(incr_y, 15).
78-
-define(detail_level_min, 0).
79-
-define(detail_level_max, 100).
8078

8179
%%%----------------------------------------------------------------------
8280
%%% Client side

lib/et/src/et_internal.hrl

+3
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@
2020
%% Purpose: Definition of internal data structures
2121
%%----------------------------------------------------------------------
2222

23+
-define(detail_level_min, 0).
24+
-define(detail_level_max, 100).
25+
2326
-record(filter, {name, function}).
2427

2528
-define(DEFAULT_FILTER_NAME, all).

lib/et/src/et_selector.erl

+1-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
%% RawPattern = detail_level()
4040
%% TracePattern = erlang_trace_pattern_match_spec()
4141
%%
42-
%% detail_level() = min | max | integer(X) when X =< 0, X >= 100
42+
%% detail_level() = min | max | integer(X) when X >= 0, X =< 100
4343
%%
4444
%% min - minimum level of tracing (ignore calls to trace_me/4,5)
4545
%% max - maximum level of tracing (all calls to trace_me/4,5)

lib/et/src/et_wx_viewer.erl

+3-5
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,6 @@
4040
-define(incr_x, 60).
4141
-define(initial_y, 15).
4242
-define(incr_y, 15).
43-
-define(detail_level_min, 0).
44-
-define(detail_level_max, 100).
4543

4644
-record(state,
4745
{parent_pid, % Pid of parent process
@@ -175,8 +173,8 @@ parse_opt([H | T], S, CollectorOpt) ->
175173
{title, Title} ->
176174
parse_opt(T, S#state{title = name_to_string(Title)}, CollectorOpt);
177175
{detail_level, Level} when is_integer(Level),
178-
Level >= ?detail_level_min,
179-
Level =< ?detail_level_max ->
176+
Level >= ?detail_level_min,
177+
Level =< ?detail_level_max ->
180178
parse_opt(T, S#state{detail_level = Level}, CollectorOpt);
181179
{detail_level, max} ->
182180
parse_opt(T, S#state{detail_level = ?detail_level_max}, CollectorOpt);
@@ -1558,7 +1556,7 @@ collect_event(Event, {S, Incr, Order, Active, FilterFun, #e{pos = PrevPos}, Even
15581556
{S, Incr, Order, Active, FilterFun, LastE, Events2}.
15591557

15601558
display_event(#e{event = Event} = E, S, DC)
1561-
when Event#event.detail_level < S#state.detail_level ->
1559+
when Event#event.detail_level =< S#state.detail_level ->
15621560
{FromRefresh, From} = ensure_actor(Event#event.from, S, DC),
15631561
{FromName, FromPos, S2} = From,
15641562
{ToRefresh, To} = ensure_actor(Event#event.to, S2, DC),

0 commit comments

Comments
 (0)