Commit cda1dc52 authored by Bjorn Munch's avatar Bjorn Munch

Bug #11760361 52764: EXTEND MYSQL-TEST-RUN SUPPORT FOR SUN STUDIO DBX BY ADDING --DBX DEBUGGER

Added necessary options and variables
Added dbx_arguments() similar to gdb_arguments()
Unlike gdb, cannot use init file but must provide commands and args as
  command line argument to dbx
Also simplified debugger behavior to always start with a breakpoint in main()
parent 96a7bbb3
...@@ -219,9 +219,12 @@ our %gprof_dirs; ...@@ -219,9 +219,12 @@ our %gprof_dirs;
our $glob_debugger= 0; our $glob_debugger= 0;
our $opt_gdb; our $opt_gdb;
our $opt_client_gdb; our $opt_client_gdb;
our $opt_dbx;
our $opt_client_dbx;
our $opt_ddd; our $opt_ddd;
our $opt_client_ddd; our $opt_client_ddd;
our $opt_manual_gdb; our $opt_manual_gdb;
our $opt_manual_dbx;
our $opt_manual_ddd; our $opt_manual_ddd;
our $opt_manual_debug; our $opt_manual_debug;
our $opt_debugger; our $opt_debugger;
...@@ -1001,6 +1004,9 @@ sub command_line_setup { ...@@ -1001,6 +1004,9 @@ sub command_line_setup {
'ddd' => \$opt_ddd, 'ddd' => \$opt_ddd,
'client-ddd' => \$opt_client_ddd, 'client-ddd' => \$opt_client_ddd,
'manual-ddd' => \$opt_manual_ddd, 'manual-ddd' => \$opt_manual_ddd,
'dbx' => \$opt_dbx,
'client-dbx' => \$opt_client_dbx,
'manual-dbx' => \$opt_manual_dbx,
'debugger=s' => \$opt_debugger, 'debugger=s' => \$opt_debugger,
'client-debugger=s' => \$opt_client_debugger, 'client-debugger=s' => \$opt_client_debugger,
'strace-client:s' => \$opt_strace_client, 'strace-client:s' => \$opt_strace_client,
...@@ -1426,6 +1432,12 @@ sub command_line_setup { ...@@ -1426,6 +1432,12 @@ sub command_line_setup {
$opt_ddd= undef; $opt_ddd= undef;
} }
if ($opt_dbx) {
mtr_warning("Silently converting --dbx to --client-dbx in embedded mode");
$opt_client_dbx= $opt_dbx;
$opt_dbx= undef;
}
if ($opt_debugger) if ($opt_debugger)
{ {
mtr_warning("Silently converting --debugger to --client-debugger in embedded mode"); mtr_warning("Silently converting --debugger to --client-debugger in embedded mode");
...@@ -1434,7 +1446,7 @@ sub command_line_setup { ...@@ -1434,7 +1446,7 @@ sub command_line_setup {
} }
if ( $opt_gdb || $opt_ddd || $opt_manual_gdb || $opt_manual_ddd || if ( $opt_gdb || $opt_ddd || $opt_manual_gdb || $opt_manual_ddd ||
$opt_manual_debug || $opt_debugger ) $opt_manual_debug || $opt_debugger || $opt_dbx || $opt_manual_dbx)
{ {
mtr_error("You need to use the client debug options for the", mtr_error("You need to use the client debug options for the",
"embedded server. Ex: --client-gdb"); "embedded server. Ex: --client-gdb");
...@@ -1462,6 +1474,7 @@ sub command_line_setup { ...@@ -1462,6 +1474,7 @@ sub command_line_setup {
# -------------------------------------------------------------------------- # --------------------------------------------------------------------------
if ( $opt_gdb || $opt_client_gdb || $opt_ddd || $opt_client_ddd || if ( $opt_gdb || $opt_client_gdb || $opt_ddd || $opt_client_ddd ||
$opt_manual_gdb || $opt_manual_ddd || $opt_manual_debug || $opt_manual_gdb || $opt_manual_ddd || $opt_manual_debug ||
$opt_dbx || $opt_client_dbx || $opt_manual_dbx ||
$opt_debugger || $opt_client_debugger ) $opt_debugger || $opt_client_debugger )
{ {
# Indicate that we are using debugger # Indicate that we are using debugger
...@@ -4704,6 +4717,9 @@ sub mysqld_start ($$) { ...@@ -4704,6 +4717,9 @@ sub mysqld_start ($$) {
{ {
ddd_arguments(\$args, \$exe, $mysqld->name()); ddd_arguments(\$args, \$exe, $mysqld->name());
} }
if ( $opt_dbx || $opt_manual_dbx ) {
dbx_arguments(\$args, \$exe, $mysqld->name());
}
elsif ( $opt_debugger ) elsif ( $opt_debugger )
{ {
debugger_arguments(\$args, \$exe, $mysqld->name()); debugger_arguments(\$args, \$exe, $mysqld->name());
...@@ -5374,6 +5390,9 @@ sub start_mysqltest ($) { ...@@ -5374,6 +5390,9 @@ sub start_mysqltest ($) {
{ {
ddd_arguments(\$args, \$exe, "client"); ddd_arguments(\$args, \$exe, "client");
} }
if ( $opt_client_dbx ) {
dbx_arguments(\$args, \$exe, "client");
}
elsif ( $opt_client_debugger ) elsif ( $opt_client_debugger )
{ {
debugger_arguments(\$args, \$exe, "client"); debugger_arguments(\$args, \$exe, "client");
...@@ -5408,23 +5427,11 @@ sub gdb_arguments { ...@@ -5408,23 +5427,11 @@ sub gdb_arguments {
# Remove the old gdbinit file # Remove the old gdbinit file
unlink($gdb_init_file); unlink($gdb_init_file);
if ( $type eq "client" ) # write init file for mysqld or client
{ mtr_tofile($gdb_init_file,
# write init file for client "set args $str\n" .
mtr_tofile($gdb_init_file, "break main\n" .
"set args $str\n" . "run");
"break main\n");
}
else
{
# write init file for mysqld
mtr_tofile($gdb_init_file,
"set args $str\n" .
"break mysql_parse\n" .
"commands 1\n" .
"disable 1\n" .
"end\n");
}
if ( $opt_manual_gdb ) if ( $opt_manual_gdb )
{ {
...@@ -5471,24 +5478,12 @@ sub ddd_arguments { ...@@ -5471,24 +5478,12 @@ sub ddd_arguments {
# Remove the old gdbinit file # Remove the old gdbinit file
unlink($gdb_init_file); unlink($gdb_init_file);
if ( $type eq "client" ) # write init file for mysqld or client
{ mtr_tofile($gdb_init_file,
# write init file for client "file $$exe\n" .
mtr_tofile($gdb_init_file, "set args $str\n" .
"set args $str\n" . "break main\n" .
"break main\n"); "run");
}
else
{
# write init file for mysqld
mtr_tofile($gdb_init_file,
"file $$exe\n" .
"set args $str\n" .
"break mysql_parse\n" .
"commands 1\n" .
"disable 1\n" .
"end");
}
if ( $opt_manual_ddd ) if ( $opt_manual_ddd )
{ {
...@@ -5517,6 +5512,46 @@ sub ddd_arguments { ...@@ -5517,6 +5512,46 @@ sub ddd_arguments {
} }
#
# Modify the exe and args so that program is run in dbx in xterm
#
sub dbx_arguments {
my $args= shift;
my $exe= shift;
my $type= shift;
# Put $args into a single string
my $str= join " ", @$$args;
if ( $opt_manual_dbx ) {
print "\nTo start dbx for $type, type in another window:\n";
print "cd $glob_mysql_test_dir; dbx -c \"stop in main; " .
"run $str\" $$exe\n";
# Indicate the exe should not be started
$$exe= undef;
return;
}
$$args= [];
mtr_add_arg($$args, "-title");
mtr_add_arg($$args, "$type");
mtr_add_arg($$args, "-e");
if ( $exe_libtool ) {
mtr_add_arg($$args, $exe_libtool);
mtr_add_arg($$args, "--mode=execute");
}
mtr_add_arg($$args, "dbx");
mtr_add_arg($$args, "-c");
mtr_add_arg($$args, "stop in main; run $str");
mtr_add_arg($$args, "$$exe");
$$exe= "xterm";
}
# #
# Modify the exe and args so that program is run in the selected debugger # Modify the exe and args so that program is run in the selected debugger
# #
...@@ -5547,18 +5582,6 @@ sub debugger_arguments { ...@@ -5547,18 +5582,6 @@ sub debugger_arguments {
# Set exe to debuggername # Set exe to debuggername
$$exe= $debugger; $$exe= $debugger;
}
elsif ( $debugger eq "dbx" )
{
# xterm -e dbx -r exe arg1 .. argn
unshift(@$$args, $$exe);
unshift(@$$args, "-r");
unshift(@$$args, $debugger);
unshift(@$$args, "-e");
$$exe= "xterm";
} }
else else
{ {
...@@ -5860,6 +5883,7 @@ Options for debugging the product ...@@ -5860,6 +5883,7 @@ Options for debugging the product
client-ddd Start mysqltest client in ddd client-ddd Start mysqltest client in ddd
client-debugger=NAME Start mysqltest in the selected debugger client-debugger=NAME Start mysqltest in the selected debugger
client-gdb Start mysqltest client in gdb client-gdb Start mysqltest client in gdb
client-dbx Start mysqltest client in dbx
ddd Start mysqld in ddd ddd Start mysqld in ddd
debug Dump trace output for all servers and client programs debug Dump trace output for all servers and client programs
debug-common Same as debug, but sets 'd' debug flags to debug-common Same as debug, but sets 'd' debug flags to
...@@ -5868,12 +5892,15 @@ Options for debugging the product ...@@ -5868,12 +5892,15 @@ Options for debugging the product
tracing tracing
debugger=NAME Start mysqld in the selected debugger debugger=NAME Start mysqld in the selected debugger
gdb Start the mysqld(s) in gdb gdb Start the mysqld(s) in gdb
dbx Start the mysqld(s) in dbx
manual-debug Let user manually start mysqld in debugger, before manual-debug Let user manually start mysqld in debugger, before
running test(s) running test(s)
manual-gdb Let user manually start mysqld in gdb, before running manual-gdb Let user manually start mysqld in gdb, before running
test(s) test(s)
manual-ddd Let user manually start mysqld in ddd, before running manual-ddd Let user manually start mysqld in ddd, before running
test(s) test(s)
manual-dbx Let user manually start mysqld in dbx, before running
test(s)
strace-client[=path] Create strace output for mysqltest client, optionally strace-client[=path] Create strace output for mysqltest client, optionally
specifying name and path to the trace program to use. specifying name and path to the trace program to use.
Example: $0 --strace-client=ktrace Example: $0 --strace-client=ktrace
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment