diff options
Diffstat (limited to 'upstream/fedora-40/man1/perldtrace.1')
-rw-r--r-- | upstream/fedora-40/man1/perldtrace.1 | 278 |
1 files changed, 278 insertions, 0 deletions
diff --git a/upstream/fedora-40/man1/perldtrace.1 b/upstream/fedora-40/man1/perldtrace.1 new file mode 100644 index 00000000..4b03c295 --- /dev/null +++ b/upstream/fedora-40/man1/perldtrace.1 @@ -0,0 +1,278 @@ +.\" -*- mode: troff; coding: utf-8 -*- +.\" Automatically generated by Pod::Man 5.01 (Pod::Simple 3.43) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>. +.ie n \{\ +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" ======================================================================== +.\" +.IX Title "PERLDTRACE 1" +.TH PERLDTRACE 1 2024-01-25 "perl v5.38.2" "Perl Programmers Reference Guide" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH NAME +perldtrace \- Perl's support for DTrace +.SH SYNOPSIS +.IX Header "SYNOPSIS" +.Vb 2 +\& # dtrace \-Zn \*(Aqperl::sub\-entry, perl::sub\-return { trace(copyinstr(arg0)) }\*(Aq +\& dtrace: description \*(Aqperl::sub\-entry, perl::sub\-return \*(Aq matched 10 probes +\& +\& # perl \-E \*(Aqsub outer { inner(@_) } sub inner { say shift } outer("hello")\*(Aq +\& hello +\& +\& (dtrace output) +\& CPU ID FUNCTION:NAME +\& 0 75915 Perl_pp_entersub:sub\-entry BEGIN +\& 0 75915 Perl_pp_entersub:sub\-entry import +\& 0 75922 Perl_pp_leavesub:sub\-return import +\& 0 75922 Perl_pp_leavesub:sub\-return BEGIN +\& 0 75915 Perl_pp_entersub:sub\-entry outer +\& 0 75915 Perl_pp_entersub:sub\-entry inner +\& 0 75922 Perl_pp_leavesub:sub\-return inner +\& 0 75922 Perl_pp_leavesub:sub\-return outer +.Ve +.SH DESCRIPTION +.IX Header "DESCRIPTION" +DTrace is a framework for comprehensive system\- and application-level +tracing. Perl is a DTrace \fIprovider\fR, meaning it exposes several +\&\fIprobes\fR for instrumentation. You can use these in conjunction +with kernel-level probes, as well as probes from other providers +such as MySQL, in order to diagnose software defects, or even just +your application's bottlenecks. +.PP +Perl must be compiled with the \f(CW\*(C`\-Dusedtrace\*(C'\fR option in order to +make use of the provided probes. While DTrace aims to have no +overhead when its instrumentation is not active, Perl's support +itself cannot uphold that guarantee, so it is built without DTrace +probes under most systems. One notable exception is that Mac OS X +ships a \fI/usr/bin/perl\fR with DTrace support enabled. +.SH HISTORY +.IX Header "HISTORY" +.IP 5.10.1 4 +.IX Item "5.10.1" +Perl's initial DTrace support was added, providing \f(CW\*(C`sub\-entry\*(C'\fR and +\&\f(CW\*(C`sub\-return\*(C'\fR probes. +.IP 5.14.0 4 +.IX Item "5.14.0" +The \f(CW\*(C`sub\-entry\*(C'\fR and \f(CW\*(C`sub\-return\*(C'\fR probes gain a fourth argument: the +package name of the function. +.IP 5.16.0 4 +.IX Item "5.16.0" +The \f(CW\*(C`phase\-change\*(C'\fR probe was added. +.IP 5.18.0 4 +.IX Item "5.18.0" +The \f(CW\*(C`op\-entry\*(C'\fR, \f(CW\*(C`loading\-file\*(C'\fR, and \f(CW\*(C`loaded\-file\*(C'\fR probes were added. +.SH PROBES +.IX Header "PROBES" +.IP "sub\-entry(SUBNAME, FILE, LINE, PACKAGE)" 4 +.IX Item "sub-entry(SUBNAME, FILE, LINE, PACKAGE)" +Traces the entry of any subroutine. Note that all of the variables +refer to the subroutine that is being invoked; there is currently +no way to get ahold of any information about the subroutine's +\&\fIcaller\fR from a DTrace action. +.Sp +.Vb 4 +\& :*perl*::sub\-entry { +\& printf("%s::%s entered at %s line %d\en", +\& copyinstr(arg3), copyinstr(arg0), copyinstr(arg1), arg2); +\& } +.Ve +.IP "sub\-return(SUBNAME, FILE, LINE, PACKAGE)" 4 +.IX Item "sub-return(SUBNAME, FILE, LINE, PACKAGE)" +Traces the exit of any subroutine. Note that all of the variables +refer to the subroutine that is returning; there is currently no +way to get ahold of any information about the subroutine's \fIcaller\fR +from a DTrace action. +.Sp +.Vb 4 +\& :*perl*::sub\-return { +\& printf("%s::%s returned at %s line %d\en", +\& copyinstr(arg3), copyinstr(arg0), copyinstr(arg1), arg2); +\& } +.Ve +.IP "phase\-change(NEWPHASE, OLDPHASE)" 4 +.IX Item "phase-change(NEWPHASE, OLDPHASE)" +Traces changes to Perl's interpreter state. You can internalize this +as tracing changes to Perl's \f(CW\*(C`${^GLOBAL_PHASE}\*(C'\fR variable, especially +since the values for \f(CW\*(C`NEWPHASE\*(C'\fR and \f(CW\*(C`OLDPHASE\*(C'\fR are the strings that +\&\f(CW\*(C`${^GLOBAL_PHASE}\*(C'\fR reports. +.Sp +.Vb 4 +\& :*perl*::phase\-change { +\& printf("Phase changed from %s to %s\en", +\& copyinstr(arg1), copyinstr(arg0)); +\& } +.Ve +.IP op\-entry(OPNAME) 4 +.IX Item "op-entry(OPNAME)" +Traces the execution of each opcode in the Perl runloop. This probe +is fired before the opcode is executed. When the Perl debugger is +enabled, the DTrace probe is fired \fIafter\fR the debugger hooks (but +still before the opcode itself is executed). +.Sp +.Vb 3 +\& :*perl*::op\-entry { +\& printf("About to execute opcode %s\en", copyinstr(arg0)); +\& } +.Ve +.IP loading\-file(FILENAME) 4 +.IX Item "loading-file(FILENAME)" +Fires when Perl is about to load an individual file, whether from +\&\f(CW\*(C`use\*(C'\fR, \f(CW\*(C`require\*(C'\fR, or \f(CW\*(C`do\*(C'\fR. This probe fires before the file is +read from disk. The filename argument is converted to local filesystem +paths instead of providing \f(CW\*(C`Module::Name\*(C'\fR\-style names. +.Sp +.Vb 3 +\& :*perl*:loading\-file { +\& printf("About to load %s\en", copyinstr(arg0)); +\& } +.Ve +.IP loaded\-file(FILENAME) 4 +.IX Item "loaded-file(FILENAME)" +Fires when Perl has successfully loaded an individual file, whether +from \f(CW\*(C`use\*(C'\fR, \f(CW\*(C`require\*(C'\fR, or \f(CW\*(C`do\*(C'\fR. This probe fires after the file +is read from disk and its contents evaluated. The filename argument +is converted to local filesystem paths instead of providing +\&\f(CW\*(C`Module::Name\*(C'\fR\-style names. +.Sp +.Vb 3 +\& :*perl*:loaded\-file { +\& printf("Successfully loaded %s\en", copyinstr(arg0)); +\& } +.Ve +.SH EXAMPLES +.IX Header "EXAMPLES" +.IP "Most frequently called functions" 4 +.IX Item "Most frequently called functions" +.Vb 1 +\& # dtrace \-qZn \*(Aqsub\-entry { @[strjoin(strjoin(copyinstr(arg3),"::"),copyinstr(arg0))] = count() } END {trunc(@, 10)}\*(Aq +\& +\& Class::MOP::Attribute::slots 400 +\& Try::Tiny::catch 411 +\& Try::Tiny::try 411 +\& Class::MOP::Instance::inline_slot_access 451 +\& Class::MOP::Class::Immutable::Trait:::around 472 +\& Class::MOP::Mixin::AttributeCore::has_initializer 496 +\& Class::MOP::Method::Wrapped::_\|_ANON_\|_ 544 +\& Class::MOP::Package::_package_stash 737 +\& Class::MOP::Class::initialize 1128 +\& Class::MOP::get_metaclass_by_name 1204 +.Ve +.IP "Trace function calls" 4 +.IX Item "Trace function calls" +.Vb 1 +\& # dtrace \-qFZn \*(Aqsub\-entry, sub\-return { trace(copyinstr(arg0)) }\*(Aq +\& +\& 0 \-> Perl_pp_entersub BEGIN +\& 0 <\- Perl_pp_leavesub BEGIN +\& 0 \-> Perl_pp_entersub BEGIN +\& 0 \-> Perl_pp_entersub import +\& 0 <\- Perl_pp_leavesub import +\& 0 <\- Perl_pp_leavesub BEGIN +\& 0 \-> Perl_pp_entersub BEGIN +\& 0 \-> Perl_pp_entersub dress +\& 0 <\- Perl_pp_leavesub dress +\& 0 \-> Perl_pp_entersub dirty +\& 0 <\- Perl_pp_leavesub dirty +\& 0 \-> Perl_pp_entersub whiten +\& 0 <\- Perl_pp_leavesub whiten +\& 0 <\- Perl_dounwind BEGIN +.Ve +.IP "Function calls during interpreter cleanup" 4 +.IX Item "Function calls during interpreter cleanup" +.Vb 1 +\& # dtrace \-Zn \*(Aqphase\-change /copyinstr(arg0) == "END"/ { self\->ending = 1 } sub\-entry /self\->ending/ { trace(copyinstr(arg0)) }\*(Aq +\& +\& CPU ID FUNCTION:NAME +\& 1 77214 Perl_pp_entersub:sub\-entry END +\& 1 77214 Perl_pp_entersub:sub\-entry END +\& 1 77214 Perl_pp_entersub:sub\-entry cleanup +\& 1 77214 Perl_pp_entersub:sub\-entry _force_writable +\& 1 77214 Perl_pp_entersub:sub\-entry _force_writable +.Ve +.IP "System calls at compile time" 4 +.IX Item "System calls at compile time" +.Vb 1 +\& # dtrace \-qZn \*(Aqphase\-change /copyinstr(arg0) == "START"/ { self\->interesting = 1 } phase\-change /copyinstr(arg0) == "RUN"/ { self\->interesting = 0 } syscall::: /self\->interesting/ { @[probefunc] = count() } END { trunc(@, 3) }\*(Aq +\& +\& lseek 310 +\& read 374 +\& stat64 1056 +.Ve +.IP "Perl functions that execute the most opcodes" 4 +.IX Item "Perl functions that execute the most opcodes" +.Vb 1 +\& # dtrace \-qZn \*(Aqsub\-entry { self\->fqn = strjoin(copyinstr(arg3), strjoin("::", copyinstr(arg0))) } op\-entry /self\->fqn != ""/ { @[self\->fqn] = count() } END { trunc(@, 3) }\*(Aq +\& +\& warnings::unimport 4589 +\& Exporter::Heavy::_rebuild_cache 5039 +\& Exporter::import 14578 +.Ve +.SH REFERENCES +.IX Header "REFERENCES" +.IP "DTrace Dynamic Tracing Guide" 4 +.IX Item "DTrace Dynamic Tracing Guide" +<http://dtrace.org/guide/preface.html> +.IP "DTrace: Dynamic Tracing in Oracle Solaris, Mac OS X and FreeBSD" 4 +.IX Item "DTrace: Dynamic Tracing in Oracle Solaris, Mac OS X and FreeBSD" +<https://www.amazon.com/DTrace\-Dynamic\-Tracing\-Solaris\-FreeBSD/dp/0132091518/> +.SH "SEE ALSO" +.IX Header "SEE ALSO" +.IP Devel::DTrace::Provider 4 +.IX Item "Devel::DTrace::Provider" +This CPAN module lets you create application-level DTrace probes written in +Perl. +.SH AUTHORS +.IX Header "AUTHORS" +Shawn M Moore \f(CW\*(C`sartak@gmail.com\*(C'\fR |