From 906fc6bb95ec83799f7ae15e5f0982ff174e2a8a Mon Sep 17 00:00:00 2001 From: Sven Sandberg <sven@mysql.com> Date: Mon, 13 Oct 2008 18:14:30 +0200 Subject: [PATCH] BUG#38817: please make mtr analyze crashes better Post-push fixes making it work on pushbuild's valgrind host, and clarifying the output. 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. --- mysql-test/lib/My/CoreDump.pm | 38 +++++++++++++++++------------------ 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/mysql-test/lib/My/CoreDump.pm b/mysql-test/lib/My/CoreDump.pm index 513226d1b47..ab00d15feb3 100644 --- a/mysql-test/lib/My/CoreDump.pm +++ b/mysql-test/lib/My/CoreDump.pm @@ -29,33 +29,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' --batch 2>&1` =~ + /Core was generated by `([^\s\'\`]+)/; + my $binary= $1 or return; + print "Core 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 -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 " - core generated by '$binary'\n"; + # Run gdb + my $gdb_output= + `gdb '$binary' -c '$core_name' -x '$tmp_name' --batch 2>&1`; - my $list= `gdb $binary -c $core_name -x $tmp_name -batch 2>&1` - or return; + unlink $tmp_name or die "Error removing $tmp_name: $!"; - print $list, "\n"; + return unless $gdb_output; + print <<EOF, $gdb_output, "\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; } -- 2.30.9