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