#!/usr/bin/perl -w
# ======================================================================
-# log2xml - This script translates cacao -verbosecall ouput into a
+# log2xml - This script translates cacao -verbosecall output into a
# more readable XML format. It also separates the output of
# different threads and is able to ignore commonly called
# (uninteresting) methods.
# You may want to edit the opt_ignore options below.
#
# Author : Edwin Steiner
-# Revision: $Id: log2xml.pl 2305 2005-04-14 20:10:20Z edwin $
+# Revision:
#
# $Log$
+# Revision 1.5 2005/04/15 09:33:34 edwin
+# preserve indentation of log text
+#
+# Revision 1.4 2005/04/15 09:06:54 edwin
+# output more valid xml
+#
+# Revision 1.3 2005/04/14 20:11:04 edwin
+# typo
+#
# Revision 1.2 2005/04/14 20:10:20 edwin
# disabled debug print, added vim boilerplate
#
print $file "</call>\n";
}
+sub write_xml_never_returns ( $$ )
+{
+ my ($thread,$node) = @_;
+
+ my $file = $files{$thread};
+ print $file '<never_returns';
+ print $file ' name="' . quote($node->{NAME}) . '"';
+ print $file "/>\n";
+ print $file "</call>\n";
+}
+
sub write_xml_node ( $$ )
{
my ($thread,$node) = @_;
{
my ($file) = @_;
print $file '<?xml version="1.0"?>'."\n";
+ print $file "<thread>\n";
}
sub write_xml_end ( $ )
{
my ($file) = @_;
+ print $file "</thread>\n";
}
# ======================================================================
my $lastthread;
while (<>) {
chomp($_);
- if (/LOG: \[(\S+)\]\s+(.*)/) {
- my ($thread,$log) = ($1,$2);
+ if (/LOG: \[(\S+)\](\s*)(.*)/) {
+ my ($thread,$space,$log) = ($1,$2,$3);
thread_register($thread);
$lastthread = $thread;
if ($log =~ /(1st_call|called|finished):\s*(.*)/) {
process_exception($thread,$1,$2);
}
else {
- process_text($thread,$log);
+ process_text($thread,$space.$log);
}
}
else {
write_xml_frame($thread,$top);
$ign--;
}
+ pop @{$stacks{$thread}} for 1..$ignore_level{$thread};
+ }
+ while (scalar @{$stacks{$thread}} > 1) {
+ my $top = $stacks{$thread}->[-1];
+ write_xml_never_returns($thread,$top);
+ pop @{$stacks{$thread}};
}
+ write_xml_end($files{$thread});
$files{$thread}->close();
}
print STDERR "processed $. lines\n";