List:Commits« Previous MessageNext Message »
From:Sven Sandberg Date:October 4 2008 9:28am
Subject:bzr commit into mysql-5.1 branch (sven:2668) Bug#38817
View as plain text  
#At file:///home/sven/bzr/b38817-mtr_core/5.1-rpl/

 2668 Sven Sandberg	2008-10-04
      BUG#38817: please make mtr analyze crashes better
      Post-push fixes making it work on pushbuild's valgrind host, and clarifying the
output.
modified:
  mysql-test/lib/My/CoreDump.pm

per-file messages:
  mysql-test/lib/My/CoreDump.pm
    - Improved parsing of mtr output so that it works on pushbuild's "valgrind" host.
    - Added stack trace for the thread that coredumped, to make output more readable when
there are many threads.
    - Added explanation of what the output consists of.
    - Added early removal of temp file.
=== modified file 'mysql-test/lib/My/CoreDump.pm'
--- a/mysql-test/lib/My/CoreDump.pm	2008-09-20 14:10:22 +0000
+++ b/mysql-test/lib/My/CoreDump.pm	2008-10-04 07:27:52 +0000
@@ -27,33 +27,33 @@ sub _gdb {
 
   return unless -f $core_name;
 
-  my $dir = tempdir( CLEANUP => 1 );
-  my ($tmp, $tmp_name) = tempfile( DIR => $dir );
+  # Find out name of binary that generated core
+  `gdb -c '$core_name' -q --batch 2>&1` =~
+    /Core was generated by `([^\s\'\`]+)/;
+  my $binary= $1 or  return;
+  print "Generated by '$binary'\n";
 
+  # Create tempfile containing gdb commands
+  my ($tmp, $tmp_name) = tempfile();
   print $tmp
+    "bt\n",
     "thread apply all bt\n",
     "quit\n";
+  close $tmp or die "Error closing $tmp_name: $!";
 
-  # Find out name of binary that generated core
-  my $list= `gdb -c $core_name -x $tmp_name -q --batch 2>&1`
-    or return;
-
-  my $binary;
-  foreach my $line (split('\n', $list))
-  {
-    $binary= $1
-      if ($line =~ /Core was generated by `(\S+)/);
-  }
-
-  return unless $binary;
-
-  print "Generated by '$binary'\n";
+  # Run gdb
+  my $gdb_output=
+    `gdb '$binary' -c '$core_name' -x '$tmp_name' -q --batch 2>&1`;
 
-  my $list= `gdb $binary -c $core_name -x $tmp_name -q --batch 2>&1`
-    or return;
+  unlink $tmp_name or die "Error removing $tmp_name: $!";
 
-  print $list, "\n";
+  return unless $list;
 
+  print <<EOF, $list, "\n"
+Output from gdb follows. The first stack trace is from the failing thread.
+The following stack traces are from all threads (so the failing one is
+duplicated)."
+EOF
   return 1;
 }
 

Thread
bzr commit into mysql-5.1 branch (sven:2668) Bug#38817Sven Sandberg4 Oct