[erlang-questions] how to trace gen_servers?

Matej Kosik <>
Thu Nov 29 14:09:29 CET 2007


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Ulf Wiger (TN/EAB) wrote:
> Scott Lystig Fritchie skrev:
>>
>> That's the way dicts look.  Ulf Wiger's recently-discussed shell
>> hackery wouldn't make those look any different, because (AFAIK) his
>> shell hooks wouldn't be called by io_lib:format() or whatever is doing
>> that formatting.
> 
> Actually, it might. (:
> 
> At least I started looking at that. I was trying to come up with a
> good way for e.g. dict to register an output filter, so that each
> shell instance would automatically (configurably) pick it up.
> 
> Each call to io:format(Format, Args) actually results in a message,
> {put_chars,io_lib,format,[Format,Args]} to an io server, so it could
> of course be trapped and in part diverted to io_lib_pretty:print(Term,
> ...), which is the function that is able to do the filtering.
> 
> The problem lies in that the Erlang IO subsystem is so pluggable,
> that it's difficult to know just what code is going to process
> the io_request, and for what purpose. In many cases, automatic
> filtering could be every bit as bad as it would be to automatically
> truncate the output and replace with "...", as the shell tends
> to do. Finding out how to turn on filtering in just the right
> processes, and only when desired, was the tricky part, which
> I decided to leave for (much) later.

Ok. Thank you both.

I have solved my problem. Not in such a smart way but it works for me.

I need to see the progress of processes and various values of various variables as they change over
time.

	29.11.2007 14:0:6 circuit_monitor:423
	29.11.2007 14:0:6 circuit_monitor:504
	29.11.2007 14:0:6 circuit_monitor:475
	29.11.2007 14:0:6 circuit_monitor:532
	29.11.2007 14:0:6 circuit_monitor:307 {6,113}
	29.11.2007 14:0:6 circuit_monitor:570
	29.11.2007 14:0:6 control_channel:105
	<request id="69">
	  <plot_node>
	    <value>ebno</value>
	    <id>4</id>
	    <from>11/28/2007 14:0:0</from>
	    <to>11/29/2007 14:0:0</to>
	    <width>560</width>
	    <height>125</height>
	  </plot_node>
	</request>
	29.11.2007 14:0:6 circuit_monitor:570
	29.11.2007 14:0:6 utils:95
	<response id="69" status="0">
	    <value>ebno</value>
	    <url>/NMSServer/plots/plot_1196341206788486.png</url>
	</response>

	29.11.2007 14:0:8 circuit_monitor:168
	29.11.2007 14:0:8 circuit_monitor:31
	29.11.2007 14:0:8 circuit_monitor:159
	29.11.2007 14:0:8 circuit_monitor:202 {5,active}
	29.11.2007 14:0:8 circuit_monitor:360
	29.11.2007 14:0:8 circuit_monitor:370
	29.11.2007 14:0:8 circuit_monitor:556

That is: progress of processes over time as a sequence of lines each with the following information:
- - date
- - time
- - filename
- - line number
- - optionally: the variable value I am in a given place interested in
and now I have this in a permanent log. Not very inteligent (logs grow) but for debugging the only
way how can I find out ex post what went wrong at 3:00 AM yesterday.

The disadvantage is, that I must enter in the code instructions such as

	?D

... print the "stamp" (date/time/filename/line-number)

	?S(String)

... print the "stamp" together with a given string

	?T(Term)

... print the "stamp" together with a given term

Best regards
- --
Matej Kosik
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFHTroJL+CaXfJI/hgRAnTUAKCCU54TEyGMXJ0vnUxcn1VYmwRuZwCggUkO
vrF7vahtr/tR0KwJR6HH7to=
=lD3f
-----END PGP SIGNATURE-----



More information about the erlang-questions mailing list