summaryrefslogtreecommitdiff
path: root/mysql-test/lib
diff options
context:
space:
mode:
authorSergei Golubchik <serg@mariadb.org>2021-01-26 11:56:17 +0100
committerSergei Golubchik <serg@mariadb.org>2021-02-22 19:43:08 +0100
commit77c23c62ae28611f660ea4a8b25525c3cfe2871f (patch)
treeda04c26761223b3e7d535f652aac699f8ce7550d /mysql-test/lib
parentfeacc0aaf2860a391f0febbc11e42f1d09598705 (diff)
downloadmariadb-git-77c23c62ae28611f660ea4a8b25525c3cfe2871f.tar.gz
support for mtr --valgdb
add a new "debugger" to mtr, that runs the executable under valgrind in gdb. valgrind pid is auto-detected, but the delay (sleep) and vgdb path are hard-coded for now
Diffstat (limited to 'mysql-test/lib')
-rw-r--r--mysql-test/lib/My/Debugger.pm23
1 files changed, 20 insertions, 3 deletions
diff --git a/mysql-test/lib/My/Debugger.pm b/mysql-test/lib/My/Debugger.pm
index 700124ec3cb..f6aa41269cb 100644
--- a/mysql-test/lib/My/Debugger.pm
+++ b/mysql-test/lib/My/Debugger.pm
@@ -79,6 +79,22 @@ my %debuggers = (
if ::mtr_grab_file('/proc/sys/kernel/perf_event_paranoid') > 1;
}
},
+ valgdb => {
+ term => 1,
+ run => 'gdb',
+ options => '-x {script} {exe}',
+ script => <<EEE,
+py
+import subprocess,shlex,time
+valg=subprocess.Popen(shlex.split("""valgrind --tool=memcheck --show-reachable=yes --leak-check=yes --num-callers=16 --quiet --suppressions=valgrind.supp --vgdb-error=0 {exe} {args} --loose-wait-for-pos-timeout=1500"""))
+time.sleep(2)
+gdb.execute("target remote | /usr/lib64/valgrind/../../bin/vgdb --pid=" + str(valg.pid))
+EEE
+ pre => sub {
+ my $debug_libraries_path= "/usr/lib/debug";
+ $ENV{LD_LIBRARY_PATH} .= ":$debug_libraries_path" if -d $debug_libraries_path;
+ }
+ },
# aliases
vsjitdebugger => 'windbg',
@@ -147,16 +163,17 @@ sub do_args($$$$$) {
my $options = subst($v->{options}, %vars);
@$$args = map { unquote_for_mtr $_ } $options =~ /("[^"]+"|\S+)/g;
+ my $run = $v->{run} || $k;
if ($opt =~ /^manual-/) {
print "\nTo start $k for $type, type in another window:\n";
- print "$k $options\n";
+ print "$run $options\n";
$$exe= undef; # Indicate the exe should not be started
} elsif ($v->{term}) {
- unshift @$$args, '-title', $type, '-e', $k;
+ unshift @$$args, '-title', $type, '-e', $run;
$$exe = 'xterm';
} else {
- $$exe = $k;
+ $$exe = $run;
}
}