Loading mysql-test/Makefile.am +1 −0 Original line number Diff line number Diff line Loading @@ -43,6 +43,7 @@ nobase_test_DATA = lib/mtr_cases.pm \ lib/My/SafeProcess.pm \ lib/My/File/Path.pm \ lib/My/SysInfo.pm \ lib/My/CoreDump.pm \ lib/My/SafeProcess/Base.pm \ lib/My/SafeProcess/safe_process.pl Loading mysql-test/lib/My/CoreDump.pm 0 → 100644 +79 −0 Original line number Diff line number Diff line # -*- cperl -*- # Copyright (C) 2004-2006 MySQL AB # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 2 of the License. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA package My::CoreDump; use strict; use Carp; use My::Platform; use File::Temp qw/ tempfile tempdir /; sub _gdb { my ($core_name)= @_; return unless -f $core_name; my $dir = tempdir( CLEANUP => 1 ); my ($tmp, $tmp_name) = tempfile( DIR => $dir ); print $tmp "thread apply all bt\n", "quit\n"; # Find out name of binary that generated core my $list= `gdb -c $core_name -x $tmp_name -q 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"; my $list= `gdb $binary -c $core_name -x $tmp_name -q 2>&1` or return; print $list, "\n"; return 1; } sub show { my ($class, $core_name)= @_; my @debuggers = ( \&_gdb, # TODO... ); foreach my $debugger (@debuggers){ if ($debugger->($core_name)){ return; } } return; } 1; mysql-test/mysql-test-run.pl +8 −6 Original line number Diff line number Diff line Loading @@ -50,6 +50,7 @@ use My::ConfigFactory; use My::Options; use My::Find; use My::SysInfo; use My::CoreDump; use mtr_cases; use mtr_report; use mtr_match; Loading Loading @@ -446,14 +447,15 @@ sub run_test_server ($$$) { my $core_name= basename($core_file); if ($core_name =~ "core*"){ if ($num_saved_cores >= $opt_max_save_core) { mtr_report(" - deleting '$core_name'", "($num_saved_cores/$opt_max_save_core)"); unlink("$core_file"); } else { mtr_report(" - found '$core_name'", "($num_saved_cores/$opt_max_save_core)"); My::CoreDump->show($core_file); if ($num_saved_cores >= $opt_max_save_core) { mtr_report(" - deleting it, already saved", "$opt_max_save_core"); unlink("$core_file"); } ++$num_saved_cores; } Loading Loading
mysql-test/Makefile.am +1 −0 Original line number Diff line number Diff line Loading @@ -43,6 +43,7 @@ nobase_test_DATA = lib/mtr_cases.pm \ lib/My/SafeProcess.pm \ lib/My/File/Path.pm \ lib/My/SysInfo.pm \ lib/My/CoreDump.pm \ lib/My/SafeProcess/Base.pm \ lib/My/SafeProcess/safe_process.pl Loading
mysql-test/lib/My/CoreDump.pm 0 → 100644 +79 −0 Original line number Diff line number Diff line # -*- cperl -*- # Copyright (C) 2004-2006 MySQL AB # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 2 of the License. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA package My::CoreDump; use strict; use Carp; use My::Platform; use File::Temp qw/ tempfile tempdir /; sub _gdb { my ($core_name)= @_; return unless -f $core_name; my $dir = tempdir( CLEANUP => 1 ); my ($tmp, $tmp_name) = tempfile( DIR => $dir ); print $tmp "thread apply all bt\n", "quit\n"; # Find out name of binary that generated core my $list= `gdb -c $core_name -x $tmp_name -q 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"; my $list= `gdb $binary -c $core_name -x $tmp_name -q 2>&1` or return; print $list, "\n"; return 1; } sub show { my ($class, $core_name)= @_; my @debuggers = ( \&_gdb, # TODO... ); foreach my $debugger (@debuggers){ if ($debugger->($core_name)){ return; } } return; } 1;
mysql-test/mysql-test-run.pl +8 −6 Original line number Diff line number Diff line Loading @@ -50,6 +50,7 @@ use My::ConfigFactory; use My::Options; use My::Find; use My::SysInfo; use My::CoreDump; use mtr_cases; use mtr_report; use mtr_match; Loading Loading @@ -446,14 +447,15 @@ sub run_test_server ($$$) { my $core_name= basename($core_file); if ($core_name =~ "core*"){ if ($num_saved_cores >= $opt_max_save_core) { mtr_report(" - deleting '$core_name'", "($num_saved_cores/$opt_max_save_core)"); unlink("$core_file"); } else { mtr_report(" - found '$core_name'", "($num_saved_cores/$opt_max_save_core)"); My::CoreDump->show($core_file); if ($num_saved_cores >= $opt_max_save_core) { mtr_report(" - deleting it, already saved", "$opt_max_save_core"); unlink("$core_file"); } ++$num_saved_cores; } Loading