1The following are examples of pl_flow.d. 2 3This is a simple script to trace the flow of Perl subroutines (functions). 4Here it traces the example program, Code/Perl/func_abc.pl. 5 6 # pl_flow.d 7 C TIME(us) FILE -- SUB 8 0 2979519183757 func_abc.pl -> func_a 9 0 2979520190159 func_abc.pl -> func_b 10 0 2979521200166 func_abc.pl -> func_c 11 0 2979522210184 func_abc.pl <- func_c 12 0 2979522210199 func_abc.pl <- func_b 13 0 2979522210207 func_abc.pl <- func_a 14 ^C 15 16As each subroutine is entered, the third column is indented by 2 spaces. This 17shows which subroutine is calling who - the output abovebegins by showing that 18func_a() began, and then called func_b(). 19 20If the output looks shuffled, check the CPU "C" and "TIME" columns, and 21post sort based on TIME if necessary. 22 23See Notes/ALLflow_notes.txt for important notes about reading flow outputs. 24 25 26 27The following traces a Perl network interface statistics tool, "nicstat" 28version 0.99, 29 30# pl_flow.d 31 C TIME(us) FILE -- SUB 32 0 4181899422549 nicstat -> BEGIN 33 0 4181899423048 strict.pm -> bits 34 0 4181899423081 strict.pm <- bits 35 0 4181899423105 strict.pm -> import 36 0 4181899423126 strict.pm <- import 37 0 4181899423133 nicstat <- BEGIN 38 0 4181899423157 nicstat -> BEGIN 39 0 4181899445634 Exporter.pm -> import 40 0 4181899445730 Exporter.pm <- import 41 0 4181899445743 nicstat <- BEGIN 42 0 4181899445770 nicstat -> BEGIN 43 0 4181899446066 Kstat.pm -> BEGIN 44 0 4181899446076 strict.pm -> import 45 0 4181899446087 strict.pm <- import 46 0 4181899446094 Kstat.pm <- BEGIN 47 0 4181899446116 Kstat.pm -> BEGIN 48 0 4181899453669 DynaLoader.pm -> BEGIN 49 0 4181899453810 vars.pm -> BEGIN 50 0 4181899453821 vars.pm <- BEGIN 51 0 4181899453921 vars.pm -> BEGIN 52 0 4181899454494 warnings.pm -> BEGIN 53 0 4181899455149 warnings.pm <- BEGIN 54 0 4181899457183 register.pm -> import 55 0 4181899457202 register.pm -> mkMask 56 0 4181899457214 register.pm <- mkMask 57 0 4181899457264 register.pm -> mkMask 58 0 4181899457274 register.pm <- mkMask 59 0 4181899457283 register.pm <- import 60 0 4181899457290 vars.pm <- BEGIN 61 0 4181899457316 vars.pm -> BEGIN 62 0 4181899457324 strict.pm -> import 63 0 4181899457332 strict.pm -> bits 64 0 4181899457345 strict.pm <- bits 65 0 4181899457353 strict.pm <- import 66 0 4181899457359 vars.pm <- BEGIN 67 0 4181899457652 vars.pm -> import 68 0 4181899457703 vars.pm <- import 69 0 4181899457710 DynaLoader.pm <- BEGIN 70 0 4181899457758 DynaLoader.pm -> BEGIN 71 0 4181899457883 Config.pm -> BEGIN 72 0 4181899457890 strict.pm -> import 73 0 4181899457899 strict.pm <- import 74 0 4181899457906 Config.pm <- BEGIN 75 0 4181899458038 Config.pm -> BEGIN 76 0 4181899458045 strict.pm -> unimport 77 0 4181899458053 strict.pm -> bits 78 0 4181899458063 strict.pm <- bits 79 0 4181899458077 strict.pm <- unimport 80 0 4181899458084 Config.pm <- BEGIN 81 0 4181899458426 Config.pm -> TIEHASH 82 0 4181899458435 Config.pm <- TIEHASH 83 0 4181899458476 Config.pm -> import 84 0 4181899458493 Config.pm <- import 85 0 4181899458500 DynaLoader.pm <- BEGIN 86 0 4181899459978 AutoLoader.pm -> BEGIN 87 0 4181899459990 strict.pm -> import 88 0 4181899460033 strict.pm <- import 89 0 4181899460064 AutoLoader.pm <- BEGIN 90 0 4181899460088 AutoLoader.pm -> BEGIN 91 0 4181899460096 AutoLoader.pm <- BEGIN 92 0 4181899460187 AutoLoader.pm -> BEGIN 93 0 4181899460199 AutoLoader.pm <- BEGIN 94 0 4181899460582 AutoLoader.pm -> BEGIN 95 0 4181899460590 strict.pm -> unimport 96 0 4181899460598 strict.pm -> bits 97 0 4181899460611 strict.pm <- bits 98 0 4181899460619 strict.pm <- unimport 99 0 4181899460625 AutoLoader.pm <- BEGIN 100 0 4181899460830 AutoLoader.pm -> BEGIN 101 0 4181899460838 strict.pm -> unimport 102 0 4181899460845 strict.pm -> bits 103 0 4181899460855 strict.pm <- bits 104 0 4181899460862 strict.pm <- unimport 105 0 4181899460869 AutoLoader.pm <- BEGIN 106 0 4181899461092 AutoLoader.pm -> BEGIN 107 0 4181899461100 strict.pm -> unimport 108 0 4181899461107 strict.pm -> bits 109 0 4181899461116 strict.pm <- bits 110 0 4181899461124 strict.pm <- unimport 111 0 4181899461130 AutoLoader.pm <- BEGIN 112 0 4181899461238 Config.pm -> FETCH 113 0 4181899461250 Config.pm <- FETCH 114 0 4181899461264 Config.pm -> FETCH 115 0 4181899461272 Config.pm <- FETCH 116 0 4181899461282 Config.pm -> FETCH 117 0 4181899461290 Config.pm <- FETCH 118 0 4181899461299 Config.pm -> FETCH 119 0 4181899461307 Config.pm <- FETCH 120 0 4181899461403 Kstat.pm <- BEGIN 121 0 4181899461432 Kstat.pm -> BEGIN 122 0 4181899461440 vars.pm -> import 123 0 4181899461476 vars.pm <- import 124 0 4181899461483 Kstat.pm <- BEGIN 125 0 4181899461539 DynaLoader.pm -> bootstrap 126 0 4181899461769 DynaLoader.pm -> dl_load_flags 127 0 4181899461777 DynaLoader.pm <- dl_load_flags 128 0 4181899462208 DynaLoader.pm <- bootstrap 129 0 4181899462231 nicstat <- BEGIN 130 0 4181899468306 Std.pm -> getopts 131 0 4181899468351 Exporter.pm -> import 132 0 4181899468390 Exporter.pm <- import 133 0 4181899468405 Std.pm <- getopts 134 0 4181899468426 nicstat -> find_nets 135 0 4181899521011 nicstat <- find_nets 136 0 4181899521415 nicstat -> fetch_net_data 137 0 4181899564973 nicstat <- fetch_net_data 138 0 4181899565526 nicstat -> print_neat 139 0 4181899565672 nicstat <- print_neat 140 0 4181899565680 nicstat -> print_neat 141 0 4181899565902 nicstat <- print_neat 142 0 4181899565909 nicstat -> print_neat 143 0 4181899566033 nicstat <- print_neat 144 0 4181899566039 nicstat -> print_neat 145 0 4181899566165 nicstat <- print_neat 146 0 4181899566172 nicstat -> print_neat 147 0 4181899566331 nicstat <- print_neat 148 0 4181899566338 nicstat -> print_neat 149 0 4181899566494 nicstat <- print_neat 150 0 4181899566791 nicstat -> print_neat 151 0 4181899566953 nicstat <- print_neat 152 0 4181899566961 nicstat -> print_neat 153 0 4181899567085 nicstat <- print_neat 154 0 4181899567091 nicstat -> print_neat 155 0 4181899567247 nicstat <- print_neat 156 0 4181899567254 nicstat -> print_neat 157 0 4181899567377 nicstat <- print_neat 158 0 4181899567383 nicstat -> print_neat 159 0 4181899567538 nicstat <- print_neat 160 0 4181899567544 nicstat -> print_neat 161 0 4181899567666 nicstat <- print_neat 162 0 4181899567977 nicstat -> print_neat 163 0 4181899568232 nicstat <- print_neat 164 0 4181899568240 nicstat -> print_neat 165 0 4181899568397 nicstat <- print_neat 166 0 4181899568404 nicstat -> print_neat 167 0 4181899568528 nicstat <- print_neat 168 0 4181899568535 nicstat -> print_neat 169 0 4181899568656 nicstat <- print_neat 170 0 4181899568663 nicstat -> print_neat 171 0 4181899568819 nicstat <- print_neat 172 0 4181899568826 nicstat -> print_neat 173 0 4181899568947 nicstat <- print_neat 174 0 4181899572708 Config.pm -> DESTROY 175 0 4181899572735 Config.pm <- DESTROY 176 177After initialising Perl libraries and modules, the "nicstat" program ran, 178the output matching what was expected from the source. 179 180