If you have a look it dumpvar.pl, you will find my name there. Once upon a time, during the birth pangs of Perl 5, I did bang my head against it.
I agree with you that the debugger is a Real Mess (tm) and hopefully in Perl 6 it will be a lot nicer. Another way would be make an opaque object so that the values don't get dumped down. Peter On Mon, 2007-05-14 at 09:30 +0300, Gaal Yahas wrote: > I disagree on both counts. :-) > > Simplicity isn't one of the best descriptions of the debugger code. > (By which I mean > the actual debugger, perl5db.pl.) I mean sure, you could tweak around lines: > 2434 > 654 > 5547 > > But you'd still have to bang your head against dumpvar.pl. > > And how to make the interface for it? Just hardcode some arbitrary > limit? Yet another config option? What happens when your members are > actually tied scalars that when read do some expensive operation like > compute a value or read from the network? Maybe you want to skip those > fields too... How? > > If what guides you is a sense that debuggability features don't seem > clean to leave in production code, I hear you, but consider that they > would be implemented in a separate unit of modularity (a Role, in the > case of Perl 6) and have declarative, thus uncluttering, > configuration. Incidentally, in Perl 6 Roles can be composed at > runtime, so your production program has absolutely no trace of this > filterable dumpage, until you drop into the debugger and add it to a > particular instance. Then you also have a consistent interface to mess > around with its properties. > > On 5/14/07, Peter Gordon <[EMAIL PROTECTED]> wrote: > > It might be simpler and more consistent to add an option to the debugger > > itself. > > > > On Sun, 2007-05-13 at 21:50 +0300, Gaal Yahas wrote: > > > On 5/13/07, Peter Gordon <[EMAIL PROTECTED]> wrote: > > > > On this occasion, one of the elements is a string a few megabytes long, > > > > and I don't really want to dump the whole string. > > > > > > > > What would be the nicest way to suppress printing of this particular > > > > element. > > > > > > > > I could print each element in turn, but that is inelegant. > > > > > > I'm afraid I don't have an elegant solution to offer. (A related > > > problem that does > > > have debugger support is deeply recursive structures. Saying "x 3 > > > $that" limits to > > > depth 3 print.) > > > > > > What you might do -- and I'm not saying this is significantly > > > different from printing each element in turn -- is add a to_debug > > > method to the object. This copies the object but only leaves a digest > > > version of the long string, say with the first 100 characters. > > > > > > Not that I've searched CPAN for prior art, but you might want to make > > > this into a reusable module. (With Moose.pm or Perl 6, it would more > > > properly be a Role.) Something like: > > > > > > package MyModuleWithLongMember; > > > > > > use Debug::Dump::Digest qw(long_memb1 huge_memb2); > > > > > > And then in the debugger: > > > > > > x $self->to_debug; > > > > > > > _______________________________________________ > > Perl mailing list > > [email protected] > > http://perl.org.il/mailman/listinfo/perl > > > > _______________________________________________ Perl mailing list [email protected] http://perl.org.il/mailman/listinfo/perl
