Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:23
erlang
5931-dbg-Add-dbg-tracer-file-Filename.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 5931-dbg-Add-dbg-tracer-file-Filename.patch of Package erlang
From 43266f371fc43e5a4bface5ef2d5adc11b92a38d Mon Sep 17 00:00:00 2001 From: Lukas Larsson <lukas@erlang.org> Date: Fri, 4 Feb 2022 09:32:52 +0100 Subject: [PATCH 1/2] dbg: Add dbg:tracer(file, Filename) This function can be used to trace to a file in clear text --- lib/runtime_tools/doc/src/dbg.xml | 5 ++++- lib/runtime_tools/src/dbg.erl | 13 +++++++++++-- lib/runtime_tools/test/dbg_SUITE.erl | 29 ++++++++++++++++++++++++++-- 3 files changed, 42 insertions(+), 5 deletions(-) diff --git a/lib/runtime_tools/doc/src/dbg.xml b/lib/runtime_tools/doc/src/dbg.xml index ba7641ffa9..5d9d7486d4 100644 --- a/lib/runtime_tools/doc/src/dbg.xml +++ b/lib/runtime_tools/doc/src/dbg.xml @@ -821,7 +821,7 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\ <name since="">tracer(Type, Data) -> {ok, pid()} | {error, Error}</name> <fsummary>Start a tracer server with additional parameters</fsummary> <type> - <v>Type = port | process | module</v> + <v>Type = port | process | module | file</v> <v>Data = PortGenerator | HandlerSpec | ModuleSpec</v> <v>PortGenerator = fun() (no arguments)</v> <v>Error = term()</v> @@ -862,6 +862,9 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\ be either a tuple describing the <seeerl marker="erts:erl_tracer"><c>erl_tracer</c></seeerl> module to be used for tracing and the state to be used for that tracer module or a fun returning the same tuple.</p> + <p>if <c>Type</c> is <c>file</c>, then the second parameter + should be a filename specifying a file where all the traces + are printed.</p> <p>If an error is returned, it can either be due to a tracer server already running (<c>{error,already_started}</c>) or due to the <c>HandlerFun</c> throwing an exception. diff --git a/lib/runtime_tools/src/dbg.erl b/lib/runtime_tools/src/dbg.erl index d5be9ac6a9..e35ba820be 100644 --- a/lib/runtime_tools/src/dbg.erl +++ b/lib/runtime_tools/src/dbg.erl @@ -317,8 +317,17 @@ tracer(process, {Handler,HandlerData}) -> tracer(module, Fun) when is_function(Fun) -> start(Fun); tracer(module, {Module, State}) -> - start(fun() -> {Module, State} end). - + start(fun() -> {Module, State} end); + +tracer(file, Filename) -> + tracer(process, + {fun F(E, undefined) -> + {ok, D} = file:open(Filename, [write]), + F(E, D); + F(E, D) -> + dhandler(E, D), + D + end, undefined}). remote_tracer(port, Fun) when is_function(Fun) -> remote_start(Fun); diff --git a/lib/runtime_tools/test/dbg_SUITE.erl b/lib/runtime_tools/test/dbg_SUITE.erl index 209af7be19..ce4e122107 100644 --- a/lib/runtime_tools/test/dbg_SUITE.erl +++ b/lib/runtime_tools/test/dbg_SUITE.erl @@ -23,7 +23,7 @@ -export([all/0, suite/0, init_per_suite/1, end_per_suite/1, big/1, tiny/1, simple/1, message/1, distributed/1, port/1, send/1, recv/1, - ip_port/1, file_port/1, file_port2/1, + ip_port/1, file_port/1, file_port2/1, file_tracer/1, ip_port_busy/1, wrap_port/1, wrap_port_time/1, with_seq_trace/1, dead_suspend/1, local_trace/1, saved_patterns/1, tracer_exit_on_stop/1, @@ -41,7 +41,7 @@ suite() -> all() -> [big, tiny, simple, message, distributed, port, ip_port, send, recv, - file_port, file_port2, ip_port_busy, + file_port, file_port2, file_tracer, ip_port_busy, wrap_port, wrap_port_time, with_seq_trace, dead_suspend, local_trace, saved_patterns, tracer_exit_on_stop, erl_tracer, distributed_erl_tracer]. @@ -621,6 +621,31 @@ file_port2(Config) when is_list(Config) -> end, ok. +%% Test tracing to file +file_tracer(Config) when is_list(Config) -> + stop(), + FName = make_temp_name(Config), + %% Ok, lets try with flush and follow_file. + {ok, _} = dbg:tracer(file, FName), + try + {ok, [{matched, _node, 1}]} = dbg:p(self(),call), + {ok, _} = dbg:tp(dbg, ltp,[{'_',[],[{message, {self}}]}]), + {ok, _} = dbg:tp(dbg, ln, [{'_',[],[{message, hej}]}]), + ok = dbg:ltp(), + timer:sleep(100), + {ok, LTP} = file:read_file(FName), + <<"dbg:ltp()",_/binary>> = string:find(LTP, "dbg:ltp() ("++pid_to_list(self())++")"), + ok = dbg:ln(), + timer:sleep(100), + {ok, LN} = file:read_file(FName), + <<"dbg:ln()",_/binary>> = string:find(LN, "dbg:ln() (hej)"), + stop() + after + dbg:stop_clear(), + file:delete(FName) + end, + ok. + %% Test tracing to wrapping file port wrap_port(Config) when is_list(Config) -> Self = self(), -- 2.35.3
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor