This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Add details of module updates
[perl5.git] / pod / perldebguts.pod
index cde70b2..55f237b 100644 (file)
@@ -154,6 +154,7 @@ contents of this variable are treated as if they were the argument
 of an C<o ...> debugger command (q.v. in L<perldebug/Options>).
 
 =head3 Debugger internal variables
+
 In addition to the file and subroutine-related variables mentioned above,
 the debugger also maintains various magical internal variables.
 
@@ -191,9 +192,8 @@ Some functions are provided to simplify customization.
 
 =item *
 
-See L<perldebug/"Options"> for description of options parsed by
-C<DB::parse_options(string)> parses debugger options; see
-L<pperldebug/Options> for a description of options recognized.
+See L<perldebug/"Configurable Options"> for a description of options parsed by
+C<DB::parse_options(string)>.
 
 =item *
 
@@ -301,7 +301,7 @@ is not a complete listing, but only excerpts.
    exited Config::FETCH
    entering Config::FETCH
 
-=item 4
+=item 3
 
   in  $=main::BEGIN() from /dev/null:0
    in  $=Config::BEGIN() from lib/Config.pm:2
@@ -319,7 +319,7 @@ is not a complete listing, but only excerpts.
    in  $=Config::FETCH(ref(Config), 'osname') from lib/Config.pm:574
    in  $=Config::FETCH(ref(Config), 'osvers') from lib/Config.pm:574
 
-=item 6
+=item 4
 
   in  $=main::BEGIN() from /dev/null:0
    in  $=Config::BEGIN() from lib/Config.pm:2
@@ -343,7 +343,7 @@ is not a complete listing, but only excerpts.
    out $=Config::FETCH(ref(Config), 'PERL_VERSION') from lib/Config.pm:574
    in  $=Config::FETCH(ref(Config), 'PERL_SUBVERSION') from lib/Config.pm:574
 
-=item 14
+=item 5
 
   in  $=main::BEGIN() from /dev/null:0
    in  $=Config::BEGIN() from lib/Config.pm:2
@@ -364,7 +364,7 @@ is not a complete listing, but only excerpts.
    in  $=Config::FETCH('Config=HASH(0x1aa444)', 'baserev') from lib/Config.pm:574
    out $=Config::FETCH('Config=HASH(0x1aa444)', 'baserev') from lib/Config.pm:574
 
-=item 30
+=item 6
 
   in  $=CODE(0x15eca4)() from /dev/null:0
    in  $=CODE(0x182528)() from lib/Config.pm:2
@@ -749,12 +749,21 @@ eightfold increase.  This means that the compiled form of reasonable
 about eight times more space in memory than the code took
 on disk.
 
-There are two Perl-specific ways to analyze memory usage:
-$ENV{PERL_DEBUG_MSTATS} and B<-DL> command-line switch.  The first
-is available only if Perl is compiled with Perl's malloc(); the
-second only if Perl was built with C<-DDEBUGGING>.  See the
-instructions for how to do this in the F<INSTALL> podpage at 
-the top level of the Perl source tree.
+The B<-DL> command-line switch is obsolete since circa Perl 5.6.0
+(it was available only if Perl was built with C<-DDEBUGGING>).
+The switch was used to track Perl's memory allocations and possible
+memory leaks.  These days the use of malloc debugging tools like
+F<Purify> or F<valgrind> is suggested instead.  See also
+L<perlhack/PERL_MEM_LOG>.
+
+One way to find out how much memory is being used by Perl data
+structures is to install the Devel::Size module from CPAN: it gives
+you the minimum number of bytes required to store a particular data
+structure.  Please be mindful of the difference between the size()
+and total_size().
+
+If Perl has been compiled using Perl's malloc you can analyze Perl
+memory usage by setting the $ENV{PERL_DEBUG_MSTATS}.
 
 =head2 Using C<$ENV{PERL_DEBUG_MSTATS}>
 
@@ -859,154 +868,6 @@ never touched.
 
 =back
 
-=head2 Example of using B<-DL> switch
-
-Below we show how to analyse memory usage by 
-
-  do 'lib/auto/POSIX/autosplit.ix';
-
-The file in question contains a header and 146 lines similar to
-
-  sub getcwd;
-
-B<WARNING>: The discussion below supposes 32-bit architecture.  In 
-newer releases of Perl, memory usage of the constructs discussed
-here is greatly improved, but the story discussed below is a real-life
-story.  This story is mercilessly terse, and assumes rather more than cursory
-knowledge of Perl internals.  Type space to continue, `q' to quit. 
-(Actually, you just want to skip to the next section.)
-
-Here is the itemized list of Perl allocations performed during parsing
-of this file:
-
- !!! "after" at test.pl line 3.
-    Id  subtot   4   8  12  16  20  24  28  32  36  40  48  56  64  72  80 80+
-  0 02   13752   .   .   .   . 294   .   .   .   .   .   .   .   .   .   .   4
-  0 54    5545   .   .   8 124  16   .   .   .   1   1   .   .   .   .   .   3
-  5 05      32   .   .   .   .   .   .   .   1   .   .   .   .   .   .   .   .
-  6 02    7152   .   .   .   .   .   .   .   .   .   . 149   .   .   .   .   .
-  7 02    3600   .   .   .   .   . 150   .   .   .   .   .   .   .   .   .   .
-  7 03      64   .  -1   .   1   .   .   2   .   .   .   .   .   .   .   .   .
-  7 04    7056   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   7
-  7 17   38404   .   .   .   .   .   .   .   1   .   . 442 149   .   . 147   .
-  9 03    2078  17 249  32   .   .   .   .   2   .   .   .   .   .   .   .   .
-
-
-To see this list, insert two C<warn('!...')> statements around the call:
-
-  warn('!');
-  do 'lib/auto/POSIX/autosplit.ix';
-  warn('!!! "after"');
-
-and run it with Perl's B<-DL> option.  The first warn() will print
-memory allocation info before parsing the file and will memorize
-the statistics at this point (we ignore what it prints).  The second
-warn() prints increments with respect to these memorized data.  This
-is the printout shown above.
-
-Different I<Id>s on the left correspond to different subsystems of
-the perl interpreter.  They are just the first argument given to
-the perl memory allocation API named New().  To find what C<9 03>
-means, just B<grep> the perl source for C<903>.  You'll find it in
-F<util.c>, function savepvn().  (I know, you wonder why we told you
-to B<grep> and then gave away the answer.  That's because grepping
-the source is good for the soul.)  This function is used to store
-a copy of an existing chunk of memory.  Using a C debugger, one can
-see that the function was called either directly from gv_init() or
-via sv_magic(), and that gv_init() is called from gv_fetchpv()--which
-was itself called from newSUB().  Please stop to catch your breath now.
-
-B<NOTE>: To reach this point in the debugger and skip the calls to
-savepvn() during the compilation of the main program, you should
-set a C breakpoint
-in Perl_warn(), continue until this point is reached, and I<then> set
-a C breakpoint in Perl_savepvn().  Note that you may need to skip a
-handful of Perl_savepvn() calls that do not correspond to mass production
-of CVs (there are more C<903> allocations than 146 similar lines of
-F<lib/auto/POSIX/autosplit.ix>).  Note also that C<Perl_> prefixes are
-added by macroization code in perl header files to avoid conflicts
-with external libraries.
-
-Anyway, we see that C<903> ids correspond to creation of globs, twice
-per glob - for glob name, and glob stringification magic.
-
-Here are explanations for other I<Id>s above: 
-
-=over 4
-
-=item C<717> 
-
-Creates bigger C<XPV*> structures.  In the case above, it
-creates 3 C<AV>s per subroutine, one for a list of lexical variable
-names, one for a scratchpad (which contains lexical variables and
-C<targets>), and one for the array of scratchpads needed for
-recursion.  
-
-It also creates a C<GV> and a C<CV> per subroutine, all called from
-start_subparse().
-
-=item C<002>
-
-Creates a C array corresponding to the C<AV> of scratchpads and the
-scratchpad itself.  The first fake entry of this scratchpad is
-created though the subroutine itself is not defined yet.
-
-It also creates C arrays to keep data for the stash.  This is one HV,
-but it grows; thus, there are 4 big allocations: the big chunks are not
-freed, but are kept as additional arenas for C<SV> allocations.
-
-=item C<054>
-
-Creates a C<HEK> for the name of the glob for the subroutine.  This
-name is a key in a I<stash>.
-
-Big allocations with this I<Id> correspond to allocations of new
-arenas to keep C<HE>.
-
-=item C<602>
-
-Creates a C<GP> for the glob for the subroutine.
-
-=item C<702>
-
-Creates the C<MAGIC> for the glob for the subroutine.
-
-=item C<704>
-
-Creates I<arenas> which keep SVs.
-
-=back
-
-=head2 B<-DL> details
-
-If Perl is run with B<-DL> option, then warn()s that start with `!'
-behave specially.  They print a list of I<categories> of memory
-allocations, and statistics of allocations of different sizes for
-these categories.
-
-If warn() string starts with
-
-=over 4
-
-=item C<!!!> 
-
-print changed categories only, print the differences in counts of allocations.
-
-=item C<!!> 
-
-print grown categories only; print the absolute values of counts, and totals.
-
-=item C<!>
-
-print nonempty categories, print the absolute values of counts and totals.
-
-=back
-
-=head2 Limitations of B<-DL> statistics
-
-If an extension or external library does not use the Perl API to
-allocate memory, such allocations are not counted.
-
 =head1 SEE ALSO
 
 L<perldebug>,