summaryrefslogtreecommitdiff
path: root/mysql-test/lib
diff options
context:
space:
mode:
authorSergey Vojtovich <svoj@mariadb.org>2018-05-20 11:05:14 +0400
committerVladislav Vaintroub <wlad@mariadb.com>2018-05-21 16:34:11 +0000
commit9692f37d290030898ec68d5525c1ecb1f44925f8 (patch)
tree11b4c4d71bea7f64074e25ecbef55080ce97d25c /mysql-test/lib
parenta1d57ca1abe1b5a681e58c199afdbcf47db5f5bb (diff)
downloadmariadb-git-9692f37d290030898ec68d5525c1ecb1f44925f8.tar.gz
Added support for lldb core analysis in mtr
Diffstat (limited to 'mysql-test/lib')
-rw-r--r--mysql-test/lib/My/CoreDump.pm39
1 files changed, 39 insertions, 0 deletions
diff --git a/mysql-test/lib/My/CoreDump.pm b/mysql-test/lib/My/CoreDump.pm
index a421d51ec98..8c22ea83f6b 100644
--- a/mysql-test/lib/My/CoreDump.pm
+++ b/mysql-test/lib/My/CoreDump.pm
@@ -264,6 +264,44 @@ EOF
}
+sub _lldb
+{
+ my ($core_name)= @_;
+
+ print "\nTrying 'lldb' to get a backtrace from coredump $core_name\n";
+
+ # Create tempfile containing lldb commands
+ my ($tmp, $tmp_name)= tempfile();
+ print $tmp
+ "bt\n",
+ "thread backtrace all\n",
+ "quit\n";
+ close $tmp or die "Error closing $tmp_name: $!";
+
+ my $lldb_output= `lldb -c '$core_name' -s '$tmp_name' 2>&1`;
+
+ unlink $tmp_name or die "Error removing $tmp_name: $!";
+
+ if ($? == 127)
+ {
+ print "lldb not found, cannot get the stack trace\n";
+ return;
+ }
+
+ return if $?;
+ return unless $lldb_output;
+
+ resfile_print <<EOF . $lldb_output . "\n";
+Output from lldb 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;
+}
+
+
+
sub show {
my ($class, $core_name, $exe_mysqld, $parallel)= @_;
$hint_mysqld= $exe_mysqld;
@@ -282,6 +320,7 @@ sub show {
(
\&_dbx,
\&_gdb,
+ \&_lldb,
# TODO...
);