12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- #!/usr/bin/perl -ws
- #
- # stackcollapse-aix Collapse AIX /usr/bin/procstack backtraces
- #
- # Parse a list of backtraces as generated with the poor man's aix-perf.pl
- # profiler
- #
- use strict;
- my $process = "";
- my $current = "";
- my $previous_function = "";
- my %stacks;
- while(<>) {
- chomp;
- if (m/^\d+:/) {
- if(!($current eq "")) {
- $current = $process . ";" . $current;
- $stacks{$current} += 1;
- $current = "";
- }
- m/^\d+: ([^ ]*)/;
- $process = $1;
- $current = "";
- }
- elsif(m/^---------- tid# \d+/){
- if(!($current eq "")) {
- $current = $process . ";" . $current;
- $stacks{$current} += 1;
- }
- $current = "";
- }
- elsif(m/^(0x[0-9abcdef]*) *([^ ]*) ([^ ]*) ([^ ]*)/) {
- my $function = $2;
- my $alt = $1;
- $function=~s/\(.*\)?//;
- if($function =~ /^\[.*\]$/) {
- $function = $alt;
- }
- if ($current) {
- $current = $function . ";" . $current;
- }
- else {
- $current = $function;
- }
- }
- }
- if(!($current eq "")) {
- $current = $process . ";" . $current;
- $stacks{$current} += 1;
- $current = "";
- $process = "";
- }
- foreach my $k (sort { $a cmp $b } keys %stacks) {
- print "$k $stacks{$k}\n";
- }
|