diff options
author | Sergey Vojtovich <svoj@mariadb.org> | 2018-05-20 11:05:14 +0400 |
---|---|---|
committer | Vladislav Vaintroub <wlad@mariadb.com> | 2018-05-21 16:34:11 +0000 |
commit | 9692f37d290030898ec68d5525c1ecb1f44925f8 (patch) | |
tree | 11b4c4d71bea7f64074e25ecbef55080ce97d25c /mysql-test/lib | |
parent | a1d57ca1abe1b5a681e58c199afdbcf47db5f5bb (diff) | |
download | mariadb-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.pm | 39 |
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... ); |