1Devel::Peek(3pm) Perl Programmers Reference Guide Devel::Peek(3pm)
2
3
4
6 Devel::Peek - A data debugging tool for the XS programmer
7
9 use Devel::Peek;
10 Dump( $a );
11 Dump( $a, 5 );
12 Dump( @a );
13 Dump( %h );
14 DumpArray( 5, $a, $b, ... );
15 mstat "Point 5";
16
17 use Devel::Peek ':opd=st';
18
20 Devel::Peek contains functions which allows raw Perl datatypes to be
21 manipulated from a Perl script. This is used by those who do XS
22 programming to check that the data they are sending from C to Perl
23 looks as they think it should look. The trick, then, is to know what
24 the raw datatype is supposed to look like when it gets to Perl. This
25 document offers some tips and hints to describe good and bad raw data.
26
27 It is very possible that this document will fall far short of being
28 useful to the casual reader. The reader is expected to understand the
29 material in the first few sections of perlguts.
30
31 Devel::Peek supplies a "Dump()" function which can dump a raw Perl
32 datatype, and "mstat("marker")" function to report on memory usage (if
33 perl is compiled with corresponding option). The function DeadCode()
34 provides statistics on the data "frozen" into inactive "CV".
35 Devel::Peek also supplies "SvREFCNT()" which can query reference counts
36 on SVs. This document will take a passive, and safe, approach to data
37 debugging and for that it will describe only the "Dump()" function.
38
39 All output is to STDERR.
40
41 The "Dump()" function takes one or two arguments: something to dump,
42 and an optional limit for recursion and array elements (default is 4).
43 The first argument is evaluated in rvalue scalar context, with
44 exceptions for @array and %hash, which dump the array or hash itself.
45 So "Dump @array" works, as does "Dump $foo". And "Dump pos" will call
46 "pos" in rvalue context, whereas "Dump ${\pos}" will call it in lvalue
47 context.
48
49 Function "DumpArray()" allows dumping of multiple values (useful when
50 you need to analyze returns of functions).
51
52 The global variable $Devel::Peek::pv_limit can be set to limit the
53 number of character printed in various string values. Setting it to 0
54 means no limit.
55
56 If "use Devel::Peek" directive has a ":opd=FLAGS" argument, this
57 switches on debugging of opcode dispatch. "FLAGS" should be a
58 combination of "s", "t", and "P" (see -D flags in perlrun).
59
60 ":opd" is a shortcut for ":opd=st".
61
62 Runtime debugging
63 "CvGV($cv)" return one of the globs associated to a subroutine
64 reference $cv.
65
66 debug_flags() returns a string representation of $^D (similar to what
67 is allowed for -D flag). When called with a numeric argument, sets $^D
68 to the corresponding value. When called with an argument of the form
69 "flags-flags", set on/off bits of $^D corresponding to letters
70 before/after "-". (The returned value is for $^D before the
71 modification.)
72
73 runops_debug() returns true if the current opcode dispatcher is the
74 debugging one. When called with an argument, switches to debugging or
75 non-debugging dispatcher depending on the argument (active for newly-
76 entered subs/etc only). (The returned value is for the dispatcher
77 before the modification.)
78
79 Memory footprint debugging
80 When perl is compiled with support for memory footprint debugging
81 (default with Perl's malloc()), Devel::Peek provides an access to this
82 API.
83
84 Use mstat() function to emit a memory state statistic to the terminal.
85 For more information on the format of output of mstat() see "Using
86 $ENV{PERL_DEBUG_MSTATS}" in perldebguts.
87
88 Three additional functions allow access to this statistic from Perl.
89 First, use "mstats_fillhash(%hash)" to get the information contained in
90 the output of mstat() into %hash. The field of this hash are
91
92 minbucket nbuckets sbrk_good sbrk_slack sbrked_remains sbrks
93 start_slack topbucket topbucket_ev topbucket_odd total total_chain
94 total_sbrk totfree
95
96 Two additional fields "free", "used" contain array references which
97 provide per-bucket count of free and used chunks. Two other fields
98 "mem_size", "available_size" contain array references which provide the
99 information about the allocated size and usable size of chunks in each
100 bucket. Again, see "Using $ENV{PERL_DEBUG_MSTATS}" in perldebguts for
101 details.
102
103 Keep in mind that only the first several "odd-numbered" buckets are
104 used, so the information on size of the "odd-numbered" buckets which
105 are not used is probably meaningless.
106
107 The information in
108
109 mem_size available_size minbucket nbuckets
110
111 is the property of a particular build of perl, and does not depend on
112 the current process. If you do not provide the optional argument to
113 the functions mstats_fillhash(), fill_mstats(), mstats2hash(), then the
114 information in fields "mem_size", "available_size" is not updated.
115
116 "fill_mstats($buf)" is a much cheaper call (both speedwise and memory-
117 wise) which collects the statistic into $buf in machine-readable form.
118 At a later moment you may need to call "mstats2hash($buf, %hash)" to
119 use this information to fill %hash.
120
121 All three APIs "fill_mstats($buf)", "mstats_fillhash(%hash)", and
122 "mstats2hash($buf, %hash)" are designed to allocate no memory if used
123 the second time on the same $buf and/or %hash.
124
125 So, if you want to collect memory info in a cycle, you may call
126
127 $#buf = 999;
128 fill_mstats($_) for @buf;
129 mstats_fillhash(%report, 1); # Static info too
130
131 foreach (@buf) {
132 # Do something...
133 fill_mstats $_; # Collect statistic
134 }
135 foreach (@buf) {
136 mstats2hash($_, %report); # Preserve static info
137 # Do something with %report
138 }
139
141 The following examples don't attempt to show everything as that would
142 be a monumental task, and, frankly, we don't want this manpage to be an
143 internals document for Perl. The examples do demonstrate some basics
144 of the raw Perl datatypes, and should suffice to get most determined
145 people on their way. There are no guidewires or safety nets, nor
146 blazed trails, so be prepared to travel alone from this point and on
147 and, if at all possible, don't fall into the quicksand (it's bad for
148 business).
149
150 Oh, one final bit of advice: take perlguts with you. When you return
151 we expect to see it well-thumbed.
152
153 A simple scalar string
154 Let's begin by looking a simple scalar which is holding a string.
155
156 use Devel::Peek;
157 $a = 42; $a = "hello";
158 Dump $a;
159
160 The output:
161
162 SV = PVIV(0xbc288) at 0xbe9a8
163 REFCNT = 1
164 FLAGS = (POK,pPOK)
165 IV = 42
166 PV = 0xb2048 "hello"\0
167 CUR = 5
168 LEN = 8
169
170 This says $a is an SV, a scalar. The scalar type is a PVIV, which is
171 capable of holding an integer (IV) and/or a string (PV) value. The
172 scalar's head is allocated at address 0xbe9a8, while the body is at
173 0xbc288. Its reference count is 1. It has the "POK" flag set, meaning
174 its current PV field is valid. Because POK is set we look at the PV
175 item to see what is in the scalar. The \0 at the end indicate that
176 this PV is properly NUL-terminated. Note that the IV field still
177 contains its old numeric value, but because FLAGS doesn't have IOK set,
178 we must ignore the IV item. CUR indicates the number of characters in
179 the PV. LEN indicates the number of bytes allocated for the PV (at
180 least one more than CUR, because LEN includes an extra byte for the
181 end-of-string marker, then usually rounded up to some efficient
182 allocation unit).
183
184 A simple scalar number
185 If the scalar contains a number the raw SV will be leaner.
186
187 use Devel::Peek;
188 $a = 42;
189 Dump $a;
190
191 The output:
192
193 SV = IV(0xbc818) at 0xbe9a8
194 REFCNT = 1
195 FLAGS = (IOK,pIOK)
196 IV = 42
197
198 This says $a is an SV, a scalar. The scalar is an IV, a number. Its
199 reference count is 1. It has the "IOK" flag set, meaning it is
200 currently being evaluated as a number. Because IOK is set we look at
201 the IV item to see what is in the scalar.
202
203 A simple scalar with an extra reference
204 If the scalar from the previous example had an extra reference:
205
206 use Devel::Peek;
207 $a = 42;
208 $b = \$a;
209 Dump $a;
210
211 The output:
212
213 SV = IV(0xbe860) at 0xbe9a8
214 REFCNT = 2
215 FLAGS = (IOK,pIOK)
216 IV = 42
217
218 Notice that this example differs from the previous example only in its
219 reference count. Compare this to the next example, where we dump $b
220 instead of $a.
221
222 A reference to a simple scalar
223 This shows what a reference looks like when it references a simple
224 scalar.
225
226 use Devel::Peek;
227 $a = 42;
228 $b = \$a;
229 Dump $b;
230
231 The output:
232
233 SV = IV(0xf041c) at 0xbe9a0
234 REFCNT = 1
235 FLAGS = (ROK)
236 RV = 0xbab08
237 SV = IV(0xbe860) at 0xbe9a8
238 REFCNT = 2
239 FLAGS = (IOK,pIOK)
240 IV = 42
241
242 Starting from the top, this says $b is an SV. The scalar is an IV,
243 which is capable of holding an integer or reference value. It has the
244 "ROK" flag set, meaning it is a reference (rather than an integer or
245 string). Notice that Dump follows the reference and shows us what $b
246 was referencing. We see the same $a that we found in the previous
247 example.
248
249 Note that the value of "RV" coincides with the numbers we see when we
250 stringify $b. The addresses inside IV() are addresses of "X***"
251 structures which hold the current state of an "SV". This address may
252 change during lifetime of an SV.
253
254 A reference to an array
255 This shows what a reference to an array looks like.
256
257 use Devel::Peek;
258 $a = [42];
259 Dump $a;
260
261 The output:
262
263 SV = IV(0xc85998) at 0xc859a8
264 REFCNT = 1
265 FLAGS = (ROK)
266 RV = 0xc70de8
267 SV = PVAV(0xc71e10) at 0xc70de8
268 REFCNT = 1
269 FLAGS = ()
270 ARRAY = 0xc7e820
271 FILL = 0
272 MAX = 0
273 FLAGS = (REAL)
274 Elt No. 0
275 SV = IV(0xc70f88) at 0xc70f98
276 REFCNT = 1
277 FLAGS = (IOK,pIOK)
278 IV = 42
279
280 This says $a is a reference (ROK), which points to another SV which is
281 a PVAV, an array. The array has one element, element zero, which is
282 another SV. The field "FILL" above indicates the last element in the
283 array, similar to "$#$a".
284
285 If $a pointed to an array of two elements then we would see the
286 following.
287
288 use Devel::Peek 'Dump';
289 $a = [42,24];
290 Dump $a;
291
292 The output:
293
294 SV = IV(0x158c998) at 0x158c9a8
295 REFCNT = 1
296 FLAGS = (ROK)
297 RV = 0x1577de8
298 SV = PVAV(0x1578e10) at 0x1577de8
299 REFCNT = 1
300 FLAGS = ()
301 ARRAY = 0x1585820
302 FILL = 1
303 MAX = 1
304 FLAGS = (REAL)
305 Elt No. 0
306 SV = IV(0x1577f88) at 0x1577f98
307 REFCNT = 1
308 FLAGS = (IOK,pIOK)
309 IV = 42
310 Elt No. 1
311 SV = IV(0x158be88) at 0x158be98
312 REFCNT = 1
313 FLAGS = (IOK,pIOK)
314 IV = 24
315
316 Note that "Dump" will not report all the elements in the array, only
317 several first (depending on how deep it already went into the report
318 tree).
319
320 A reference to a hash
321 The following shows the raw form of a reference to a hash.
322
323 use Devel::Peek;
324 $a = {hello=>42};
325 Dump $a;
326
327 The output:
328
329 SV = IV(0x55cb50b50fb0) at 0x55cb50b50fc0
330 REFCNT = 1
331 FLAGS = (ROK)
332 RV = 0x55cb50b2b758
333 SV = PVHV(0x55cb50b319c0) at 0x55cb50b2b758
334 REFCNT = 1
335 FLAGS = (SHAREKEYS)
336 ARRAY = 0x55cb50b941a0 (0:7, 1:1)
337 hash quality = 100.0%
338 KEYS = 1
339 FILL = 1
340 MAX = 7
341 Elt "hello" HASH = 0x3128ece4
342 SV = IV(0x55cb50b464f8) at 0x55cb50b46508
343 REFCNT = 1
344 FLAGS = (IOK,pIOK)
345 IV = 42
346
347 This shows $a is a reference pointing to an SV. That SV is a PVHV, a
348 hash.
349
350 The "quality" of a hash is defined as the total number of comparisons
351 needed to access every element once, relative to the expected number
352 needed for a random hash. The value can go over 100%.
353
354 The total number of comparisons is equal to the sum of the squares of
355 the number of entries in each bucket. For a random hash of "<n"> keys
356 into "<k"> buckets, the expected value is:
357
358 n + n(n-1)/2k
359
360 Dumping a large array or hash
361 The "Dump()" function, by default, dumps up to 4 elements from a
362 toplevel array or hash. This number can be increased by supplying a
363 second argument to the function.
364
365 use Devel::Peek;
366 $a = [10,11,12,13,14];
367 Dump $a;
368
369 Notice that "Dump()" prints only elements 10 through 13 in the above
370 code. The following code will print all of the elements.
371
372 use Devel::Peek 'Dump';
373 $a = [10,11,12,13,14];
374 Dump $a, 5;
375
376 A reference to an SV which holds a C pointer
377 This is what you really need to know as an XS programmer, of course.
378 When an XSUB returns a pointer to a C structure that pointer is stored
379 in an SV and a reference to that SV is placed on the XSUB stack. So
380 the output from an XSUB which uses something like the T_PTROBJ map
381 might look something like this:
382
383 SV = IV(0xf381c) at 0xc859a8
384 REFCNT = 1
385 FLAGS = (ROK)
386 RV = 0xb8ad8
387 SV = PVMG(0xbb3c8) at 0xc859a0
388 REFCNT = 1
389 FLAGS = (OBJECT,IOK,pIOK)
390 IV = 729160
391 NV = 0
392 PV = 0
393 STASH = 0xc1d10 "CookBookB::Opaque"
394
395 This shows that we have an SV which is a reference, which points at
396 another SV. In this case that second SV is a PVMG, a blessed scalar.
397 Because it is blessed it has the "OBJECT" flag set. Note that an SV
398 which holds a C pointer also has the "IOK" flag set. The "STASH" is
399 set to the package name which this SV was blessed into.
400
401 The output from an XSUB which uses something like the T_PTRREF map,
402 which doesn't bless the object, might look something like this:
403
404 SV = IV(0xf381c) at 0xc859a8
405 REFCNT = 1
406 FLAGS = (ROK)
407 RV = 0xb8ad8
408 SV = PVMG(0xbb3c8) at 0xc859a0
409 REFCNT = 1
410 FLAGS = (IOK,pIOK)
411 IV = 729160
412 NV = 0
413 PV = 0
414
415 A reference to a subroutine
416 Looks like this:
417
418 SV = IV(0x24d2dd8) at 0x24d2de8
419 REFCNT = 1
420 FLAGS = (TEMP,ROK)
421 RV = 0x24e79d8
422 SV = PVCV(0x24e5798) at 0x24e79d8
423 REFCNT = 2
424 FLAGS = ()
425 COMP_STASH = 0x22c9c50 "main"
426 START = 0x22eed60 ===> 0
427 ROOT = 0x22ee490
428 GVGV::GV = 0x22de9d8 "MY" :: "top_targets"
429 FILE = "(eval 5)"
430 DEPTH = 0
431 FLAGS = 0x0
432 OUTSIDE_SEQ = 93
433 PADLIST = 0x22e9ed8
434 PADNAME = 0x22e9ec0(0x22eed00) PAD = 0x22e9ea8(0x22eecd0)
435 OUTSIDE = 0x22c9fb0 (MAIN)
436
437 This shows that
438
439 • the subroutine is not an XSUB (since "START" and "ROOT" are non-
440 zero, and "XSUB" is not listed, and is thus null);
441
442 • that it was compiled in the package "main";
443
444 • under the name "MY::top_targets";
445
446 • inside a 5th eval in the program;
447
448 • it is not currently executed (because "DEPTH" is 0);
449
450 • it has no prototype ("PROTOTYPE" field is missing).
451
453 "Dump", "mstat", "DeadCode", "DumpArray", "DumpWithOP" and "DumpProg",
454 "fill_mstats", "mstats_fillhash", "mstats2hash" by default.
455 Additionally available "SvREFCNT", "SvREFCNT_inc" and "SvREFCNT_dec".
456
458 Readers have been known to skip important parts of perlguts, causing
459 much frustration for all.
460
462 Ilya Zakharevich ilya@math.ohio-state.edu
463
464 Copyright (c) 1995-98 Ilya Zakharevich. All rights reserved. This
465 program is free software; you can redistribute it and/or modify it
466 under the same terms as Perl itself.
467
468 Author of this software makes no claim whatsoever about suitability,
469 reliability, edability, editability or usability of this product, and
470 should not be kept liable for any damage resulting from the use of it.
471 If you can use it, you are in luck, if not, I should not be kept
472 responsible. Keep a handy copy of your backup tape at hand.
473
475 perlguts, and perlguts, again.
476
477
478
479perl v5.36.3 2023-11-30 Devel::Peek(3pm)