*** empty log message ***
This commit is contained in:
parent
543e29f11a
commit
f266e5641b
|
@ -50,7 +50,7 @@ static int executing_breakpoint_commands;
|
||||||
enum enable { disabled, enabled, temporary, delete};
|
enum enable { disabled, enabled, temporary, delete};
|
||||||
|
|
||||||
/* Not that the ->silent field is not currently used by any commands
|
/* Not that the ->silent field is not currently used by any commands
|
||||||
(though the code is in there if it was to be and set_raw_breakpoint
|
(though the code is in there if it was to be, and set_raw_breakpoint
|
||||||
does set it to 0). I implemented it because I thought it would be
|
does set it to 0). I implemented it because I thought it would be
|
||||||
useful for a hack I had to put in; I'm going to leave it in because
|
useful for a hack I had to put in; I'm going to leave it in because
|
||||||
I can see how there might be times when it would indeed be useful */
|
I can see how there might be times when it would indeed be useful */
|
||||||
|
@ -825,10 +825,10 @@ breakpoint_1 (bnum, watchpoints)
|
||||||
}
|
}
|
||||||
|
|
||||||
printf_filtered ("#%-3d %c ", b->number, "nyod"[(int) b->enable]);
|
printf_filtered ("#%-3d %c ", b->number, "nyod"[(int) b->enable]);
|
||||||
if (b->address == NULL)
|
if (b->address == NULL) {
|
||||||
|
printf_filtered (" ");
|
||||||
print_expression (b->exp, stdout);
|
print_expression (b->exp, stdout);
|
||||||
else
|
} else {
|
||||||
{
|
|
||||||
if (addressprint)
|
if (addressprint)
|
||||||
printf_filtered (" 0x%08x ", b->address);
|
printf_filtered (" 0x%08x ", b->address);
|
||||||
|
|
||||||
|
@ -967,6 +967,9 @@ check_duplicates (address)
|
||||||
register struct breakpoint *b;
|
register struct breakpoint *b;
|
||||||
register int count = 0;
|
register int count = 0;
|
||||||
|
|
||||||
|
if (address == NULL) /* Watchpoints are uninteresting */
|
||||||
|
return;
|
||||||
|
|
||||||
ALL_BREAKPOINTS (b)
|
ALL_BREAKPOINTS (b)
|
||||||
if (b->enable != disabled && b->address == address)
|
if (b->enable != disabled && b->address == address)
|
||||||
{
|
{
|
||||||
|
@ -979,7 +982,11 @@ check_duplicates (address)
|
||||||
Takes as args the three things that every breakpoint must have.
|
Takes as args the three things that every breakpoint must have.
|
||||||
Returns the breakpoint object so caller can set other things.
|
Returns the breakpoint object so caller can set other things.
|
||||||
Does not set the breakpoint number!
|
Does not set the breakpoint number!
|
||||||
Does not print anything. */
|
Does not print anything.
|
||||||
|
|
||||||
|
==> This routine should not be called if there is a chance of later
|
||||||
|
error(); otherwise it leaves a bogus breakpoint on the chain. Validate
|
||||||
|
your arguments BEFORE calling this routine! */
|
||||||
|
|
||||||
static struct breakpoint *
|
static struct breakpoint *
|
||||||
set_raw_breakpoint (sal)
|
set_raw_breakpoint (sal)
|
||||||
|
@ -1260,19 +1267,28 @@ watch_command (arg, from_tty)
|
||||||
{
|
{
|
||||||
struct breakpoint *b;
|
struct breakpoint *b;
|
||||||
struct symtab_and_line sal;
|
struct symtab_and_line sal;
|
||||||
|
struct expression *exp;
|
||||||
|
struct block *exp_valid_block;
|
||||||
|
struct value *val;
|
||||||
|
|
||||||
sal.pc = NULL;
|
sal.pc = NULL;
|
||||||
sal.symtab = NULL;
|
sal.symtab = NULL;
|
||||||
sal.line = 0;
|
sal.line = 0;
|
||||||
|
|
||||||
|
/* Parse arguments. */
|
||||||
|
innermost_block = NULL;
|
||||||
|
exp = parse_c_expression (arg);
|
||||||
|
exp_valid_block = innermost_block;
|
||||||
|
val = evaluate_expression (exp);
|
||||||
|
release_value (val);
|
||||||
|
|
||||||
|
/* Now set up the breakpoint. */
|
||||||
b = set_raw_breakpoint (sal);
|
b = set_raw_breakpoint (sal);
|
||||||
set_breakpoint_count (breakpoint_count + 1);
|
set_breakpoint_count (breakpoint_count + 1);
|
||||||
b->number = breakpoint_count;
|
b->number = breakpoint_count;
|
||||||
innermost_block = NULL;
|
b->exp = exp;
|
||||||
b->exp = parse_c_expression (arg);
|
b->exp_valid_block = exp_valid_block;
|
||||||
b->exp_valid_block = innermost_block;
|
b->val = val;
|
||||||
b->val = evaluate_expression (b->exp);
|
|
||||||
release_value (b->val);
|
|
||||||
b->cond = 0;
|
b->cond = 0;
|
||||||
b->cond_string = NULL;
|
b->cond_string = NULL;
|
||||||
mention (b);
|
mention (b);
|
||||||
|
@ -1986,6 +2002,15 @@ enable_breakpoint (bpt)
|
||||||
check_duplicates (bpt->address);
|
check_duplicates (bpt->address);
|
||||||
if (bpt->val != NULL)
|
if (bpt->val != NULL)
|
||||||
{
|
{
|
||||||
|
if (bpt->exp_valid_block != NULL
|
||||||
|
&& !contained_in (get_selected_block (), bpt->exp_valid_block))
|
||||||
|
{
|
||||||
|
printf_filtered ("\
|
||||||
|
Cannot enable watchpoint %d because the block in which its expression\n\
|
||||||
|
is valid is not currently in scope.\n", bpt->number);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
value_free (bpt->val);
|
value_free (bpt->val);
|
||||||
|
|
||||||
bpt->val = evaluate_expression (bpt->exp);
|
bpt->val = evaluate_expression (bpt->exp);
|
||||||
|
@ -2189,7 +2214,6 @@ Also a prefix command for deletion of other GDB objects.\n\
|
||||||
The \"unset\" command is also an alias for \"delete\".",
|
The \"unset\" command is also an alias for \"delete\".",
|
||||||
&deletelist, "delete ", 1, &cmdlist);
|
&deletelist, "delete ", 1, &cmdlist);
|
||||||
add_com_alias ("d", "delete", class_breakpoint, 1);
|
add_com_alias ("d", "delete", class_breakpoint, 1);
|
||||||
add_com_alias ("unset", "delete", class_alias, 1);
|
|
||||||
|
|
||||||
add_cmd ("breakpoints", class_alias, delete_command,
|
add_cmd ("breakpoints", class_alias, delete_command,
|
||||||
"Delete some breakpoints or auto-display expressions.\n\
|
"Delete some breakpoints or auto-display expressions.\n\
|
||||||
|
|
20
gdb/infcmd.c
20
gdb/infcmd.c
|
@ -915,6 +915,7 @@ attach_command (args, from_tty)
|
||||||
char *args;
|
char *args;
|
||||||
int from_tty;
|
int from_tty;
|
||||||
{
|
{
|
||||||
|
dont_repeat (); /* Not for the faint of heart */
|
||||||
target_attach (args, from_tty);
|
target_attach (args, from_tty);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -934,6 +935,7 @@ detach_command (args, from_tty)
|
||||||
char *args;
|
char *args;
|
||||||
int from_tty;
|
int from_tty;
|
||||||
{
|
{
|
||||||
|
dont_repeat (); /* Not for the faint of heart */
|
||||||
target_detach (args, from_tty);
|
target_detach (args, from_tty);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -949,6 +951,18 @@ float_info (addr_exp)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct cmd_list_element *unsetlist = NULL;
|
||||||
|
|
||||||
|
/* ARGSUSED */
|
||||||
|
static void
|
||||||
|
unset_command (args, from_tty)
|
||||||
|
char *args;
|
||||||
|
int from_tty;
|
||||||
|
{
|
||||||
|
printf ("\"unset\" must be followed by the name of an unset subcommand.\n");
|
||||||
|
help_list (unsetlist, "unset ", -1, stdout);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
_initialize_infcmd ()
|
_initialize_infcmd ()
|
||||||
{
|
{
|
||||||
|
@ -973,10 +987,14 @@ give the program being debugged. With no arguments, prints the entire\n\
|
||||||
environment to be given to the program.", &showlist);
|
environment to be given to the program.", &showlist);
|
||||||
c->completer = noop_completer;
|
c->completer = noop_completer;
|
||||||
|
|
||||||
|
add_prefix_cmd ("unset", no_class, unset_command,
|
||||||
|
"Complement to certain \"set\" commands",
|
||||||
|
&unsetlist, "unset ", 0, &cmdlist);
|
||||||
|
|
||||||
c = add_cmd ("environment", class_run, unset_environment_command,
|
c = add_cmd ("environment", class_run, unset_environment_command,
|
||||||
"Cancel environment variable VAR for the program.\n\
|
"Cancel environment variable VAR for the program.\n\
|
||||||
This does not affect the program until the next \"run\" command.",
|
This does not affect the program until the next \"run\" command.",
|
||||||
&deletelist);
|
&unsetlist);
|
||||||
c->completer = noop_completer;
|
c->completer = noop_completer;
|
||||||
|
|
||||||
c = add_cmd ("environment", class_run, set_environment_command,
|
c = add_cmd ("environment", class_run, set_environment_command,
|
||||||
|
|
53
gdb/main.c
53
gdb/main.c
|
@ -68,6 +68,8 @@ int original_stack_limit;
|
||||||
#endif
|
#endif
|
||||||
char gdbinit[] = GDBINIT_FILENAME;
|
char gdbinit[] = GDBINIT_FILENAME;
|
||||||
|
|
||||||
|
#define ALL_CLEANUPS ((struct cleanup *)0)
|
||||||
|
|
||||||
/* Version number of GDB, as a string. */
|
/* Version number of GDB, as a string. */
|
||||||
|
|
||||||
extern char *version;
|
extern char *version;
|
||||||
|
@ -206,7 +208,7 @@ return_to_top_level ()
|
||||||
bpstat_clear_actions(stop_bpstat); /* Clear queued breakpoint commands */
|
bpstat_clear_actions(stop_bpstat); /* Clear queued breakpoint commands */
|
||||||
clear_momentary_breakpoints ();
|
clear_momentary_breakpoints ();
|
||||||
disable_current_display ();
|
disable_current_display ();
|
||||||
do_cleanups (0);
|
do_cleanups (ALL_CLEANUPS);
|
||||||
longjmp (to_top_level, 1);
|
longjmp (to_top_level, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -536,10 +538,14 @@ GDB manual (available as on-line info or a printed manual).\n", stderr);
|
||||||
init_source_path ();
|
init_source_path ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
do_cleanups (ALL_CLEANUPS);
|
||||||
|
|
||||||
for (i = 0; i < ndir; i++)
|
for (i = 0; i < ndir; i++)
|
||||||
if (!setjmp (to_top_level))
|
if (!setjmp (to_top_level))
|
||||||
directory_command (dirarg[i], 0);
|
directory_command (dirarg[i], 0);
|
||||||
free (dirarg);
|
free (dirarg);
|
||||||
|
do_cleanups (ALL_CLEANUPS);
|
||||||
|
|
||||||
if (execarg != NULL
|
if (execarg != NULL
|
||||||
&& symarg != NULL
|
&& symarg != NULL
|
||||||
&& strcmp (execarg, symarg) == 0)
|
&& strcmp (execarg, symarg) == 0)
|
||||||
|
@ -561,15 +567,19 @@ GDB manual (available as on-line info or a printed manual).\n", stderr);
|
||||||
if (!setjmp (to_top_level))
|
if (!setjmp (to_top_level))
|
||||||
symbol_file_command (symarg, !batch);
|
symbol_file_command (symarg, !batch);
|
||||||
}
|
}
|
||||||
|
do_cleanups (ALL_CLEANUPS);
|
||||||
|
|
||||||
if (corearg != NULL)
|
if (corearg != NULL)
|
||||||
if (!setjmp (to_top_level))
|
if (!setjmp (to_top_level))
|
||||||
core_file_command (corearg, !batch);
|
core_file_command (corearg, !batch);
|
||||||
else if (!setjmp (to_top_level))
|
else if (!setjmp (to_top_level))
|
||||||
attach_command (corearg, !batch);
|
attach_command (corearg, !batch);
|
||||||
|
do_cleanups (ALL_CLEANUPS);
|
||||||
|
|
||||||
if (ttyarg != NULL)
|
if (ttyarg != NULL)
|
||||||
if (!setjmp (to_top_level))
|
if (!setjmp (to_top_level))
|
||||||
tty_command (ttyarg, !batch);
|
tty_command (ttyarg, !batch);
|
||||||
|
do_cleanups (ALL_CLEANUPS);
|
||||||
|
|
||||||
#ifdef ADDITIONAL_OPTION_HANDLER
|
#ifdef ADDITIONAL_OPTION_HANDLER
|
||||||
ADDITIONAL_OPTION_HANDLER;
|
ADDITIONAL_OPTION_HANDLER;
|
||||||
|
@ -591,6 +601,7 @@ GDB manual (available as on-line info or a printed manual).\n", stderr);
|
||||||
if (!inhibit_gdbinit && access (homeinit, R_OK) == 0)
|
if (!inhibit_gdbinit && access (homeinit, R_OK) == 0)
|
||||||
if (!setjmp (to_top_level))
|
if (!setjmp (to_top_level))
|
||||||
source_command (homeinit, 0);
|
source_command (homeinit, 0);
|
||||||
|
do_cleanups (ALL_CLEANUPS);
|
||||||
|
|
||||||
/* Do stats; no need to do them elsewhere since we'll only
|
/* Do stats; no need to do them elsewhere since we'll only
|
||||||
need them if homedir is set. Make sure that they are
|
need them if homedir is set. Make sure that they are
|
||||||
|
@ -615,6 +626,7 @@ GDB manual (available as on-line info or a printed manual).\n", stderr);
|
||||||
if (!inhibit_gdbinit && access (gdbinit, R_OK) == 0)
|
if (!inhibit_gdbinit && access (gdbinit, R_OK) == 0)
|
||||||
if (!setjmp (to_top_level))
|
if (!setjmp (to_top_level))
|
||||||
source_command (gdbinit, 0);
|
source_command (gdbinit, 0);
|
||||||
|
do_cleanups (ALL_CLEANUPS);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < ncmd; i++)
|
for (i = 0; i < ncmd; i++)
|
||||||
|
@ -624,6 +636,7 @@ GDB manual (available as on-line info or a printed manual).\n", stderr);
|
||||||
read_command_file (stdin);
|
read_command_file (stdin);
|
||||||
else
|
else
|
||||||
source_command (cmdarg[i], !batch);
|
source_command (cmdarg[i], !batch);
|
||||||
|
do_cleanups (ALL_CLEANUPS);
|
||||||
}
|
}
|
||||||
free (cmdarg);
|
free (cmdarg);
|
||||||
|
|
||||||
|
@ -646,6 +659,7 @@ GDB manual (available as on-line info or a printed manual).\n", stderr);
|
||||||
{
|
{
|
||||||
if (!setjmp (to_top_level))
|
if (!setjmp (to_top_level))
|
||||||
{
|
{
|
||||||
|
do_cleanups (ALL_CLEANUPS); /* Do complete cleanup */
|
||||||
command_loop ();
|
command_loop ();
|
||||||
quit_command ((char *)0, instream == stdin);
|
quit_command ((char *)0, instream == stdin);
|
||||||
}
|
}
|
||||||
|
@ -710,8 +724,8 @@ execute_command (p, from_tty)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ARGSUSED */
|
/* ARGSUSED */
|
||||||
static void
|
void
|
||||||
do_nothing (foo)
|
command_loop_marker (foo)
|
||||||
int foo;
|
int foo;
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -733,7 +747,7 @@ command_loop ()
|
||||||
quit_flag = 0;
|
quit_flag = 0;
|
||||||
if (instream == stdin && stdin_is_tty)
|
if (instream == stdin && stdin_is_tty)
|
||||||
reinitialize_more_filter ();
|
reinitialize_more_filter ();
|
||||||
old_chain = make_cleanup (do_nothing, 0);
|
old_chain = make_cleanup (command_loop_marker, 0);
|
||||||
command = command_line_input (instream == stdin ? prompt : 0,
|
command = command_line_input (instream == stdin ? prompt : 0,
|
||||||
instream == stdin);
|
instream == stdin);
|
||||||
if (command == 0)
|
if (command == 0)
|
||||||
|
@ -1055,6 +1069,11 @@ catch_termination (sig)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Initialize signal handlers. */
|
/* Initialize signal handlers. */
|
||||||
|
static void
|
||||||
|
do_nothing ()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
init_signals ()
|
init_signals ()
|
||||||
{
|
{
|
||||||
|
@ -1557,7 +1576,7 @@ GDB is free software and you are welcome to distribute copies of it\n\
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
version_info (args, from_tty)
|
show_version (args, from_tty)
|
||||||
char *args;
|
char *args;
|
||||||
int from_tty;
|
int from_tty;
|
||||||
{
|
{
|
||||||
|
@ -1580,7 +1599,7 @@ quit_command (args, from_tty)
|
||||||
char *args;
|
char *args;
|
||||||
int from_tty;
|
int from_tty;
|
||||||
{
|
{
|
||||||
if (inferior_pid != 0)
|
if (inferior_pid != 0 && target_has_execution)
|
||||||
{
|
{
|
||||||
if (query ("The program is running. Quit anyway? "))
|
if (query ("The program is running. Quit anyway? "))
|
||||||
{
|
{
|
||||||
|
@ -1731,6 +1750,7 @@ echo_command (text, from_tty)
|
||||||
else
|
else
|
||||||
fputc (c, stdout);
|
fputc (c, stdout);
|
||||||
}
|
}
|
||||||
|
fflush (stdout);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ARGSUSED */
|
/* ARGSUSED */
|
||||||
|
@ -1748,10 +1768,10 @@ dump_me_command (args, from_tty)
|
||||||
|
|
||||||
/* Functions to manipulate command line editing control variables. */
|
/* Functions to manipulate command line editing control variables. */
|
||||||
|
|
||||||
/* Number of commands to print in each call to editing_info. */
|
/* Number of commands to print in each call to show_commands. */
|
||||||
#define Hist_print 10
|
#define Hist_print 10
|
||||||
static void
|
static void
|
||||||
editing_info (args, from_tty)
|
show_commands (args, from_tty)
|
||||||
char *args;
|
char *args;
|
||||||
int from_tty;
|
int from_tty;
|
||||||
{
|
{
|
||||||
|
@ -1878,7 +1898,7 @@ show_history (args, from_tty)
|
||||||
char *args;
|
char *args;
|
||||||
int from_tty;
|
int from_tty;
|
||||||
{
|
{
|
||||||
cmd_show_list (showhistlist, from_tty);
|
cmd_show_list (showhistlist, from_tty, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
int info_verbose = 0; /* Default verbose msgs off */
|
int info_verbose = 0; /* Default verbose msgs off */
|
||||||
|
@ -2084,7 +2104,7 @@ Without an argument, history expansion is enabled.", &sethistlist),
|
||||||
&showhistlist);
|
&showhistlist);
|
||||||
|
|
||||||
add_show_from_set
|
add_show_from_set
|
||||||
(add_set_cmd ("write", no_class, var_boolean, (char *)&write_history_p,
|
(add_set_cmd ("save", no_class, var_boolean, (char *)&write_history_p,
|
||||||
"Set saving of the history record on exit.\n\
|
"Set saving of the history record on exit.\n\
|
||||||
Use \"on\" to enable to enable the saving, and \"off\" to disable it.\n\
|
Use \"on\" to enable to enable the saving, and \"off\" to disable it.\n\
|
||||||
Without an argument, saving is enabled.", &sethistlist),
|
Without an argument, saving is enabled.", &sethistlist),
|
||||||
|
@ -2103,11 +2123,10 @@ ie. the number of previous commands to keep a record of.", &sethistlist);
|
||||||
&showhistlist);
|
&showhistlist);
|
||||||
|
|
||||||
add_show_from_set
|
add_show_from_set
|
||||||
(add_set_cmd ("caution", class_support, var_boolean,
|
(add_set_cmd ("confirm", class_support, var_boolean,
|
||||||
(char *)&caution,
|
(char *)&caution,
|
||||||
"Set expected caution of user.\n\
|
"Set whether to confirm potentially dangerous operations.",
|
||||||
If on (the default), more warnings are printed, and the user is asked whether\n\
|
&setlist),
|
||||||
they really want to do various major commands.", &setlist),
|
|
||||||
&showlist);
|
&showlist);
|
||||||
|
|
||||||
add_prefix_cmd ("info", class_info, info_command,
|
add_prefix_cmd ("info", class_info, info_command,
|
||||||
|
@ -2121,7 +2140,9 @@ they really want to do various major commands.", &setlist),
|
||||||
/* Another way to get at the same thing. */
|
/* Another way to get at the same thing. */
|
||||||
add_info ("set", show_command, "Show all GDB settings.");
|
add_info ("set", show_command, "Show all GDB settings.");
|
||||||
|
|
||||||
add_info ("editing", editing_info, "Status of command editor.");
|
add_cmd ("commands", no_class, show_commands, "Status of command editor.",
|
||||||
|
&showlist);
|
||||||
|
|
||||||
add_info ("version", version_info, "Report what version of GDB this is.");
|
add_cmd ("version", no_class, show_version,
|
||||||
|
"Report what version of GDB this is.", &showlist);
|
||||||
}
|
}
|
||||||
|
|
13
gdb/utils.c
13
gdb/utils.c
|
@ -272,6 +272,7 @@ void
|
||||||
init_malloc ()
|
init_malloc ()
|
||||||
{
|
{
|
||||||
mcheck (malloc_botch);
|
mcheck (malloc_botch);
|
||||||
|
mtrace ();
|
||||||
}
|
}
|
||||||
#endif /* Have mcheck(). */
|
#endif /* Have mcheck(). */
|
||||||
|
|
||||||
|
@ -1275,20 +1276,20 @@ _initialize_utils ()
|
||||||
(add_set_cmd ("demangle", class_support, var_boolean,
|
(add_set_cmd ("demangle", class_support, var_boolean,
|
||||||
(char *)&demangle,
|
(char *)&demangle,
|
||||||
"Set demangling of encoded C++ names when displaying symbols.",
|
"Set demangling of encoded C++ names when displaying symbols.",
|
||||||
&setlist),
|
&setprintlist),
|
||||||
&showlist);
|
&showprintlist);
|
||||||
|
|
||||||
add_show_from_set
|
add_show_from_set
|
||||||
(add_set_cmd ("sevenbit-strings", class_support, var_boolean,
|
(add_set_cmd ("sevenbit-strings", class_support, var_boolean,
|
||||||
(char *)&sevenbit_strings,
|
(char *)&sevenbit_strings,
|
||||||
"Set printing of 8-bit characters in strings as \\nnn.",
|
"Set printing of 8-bit characters in strings as \\nnn.",
|
||||||
&setlist),
|
&setprintlist),
|
||||||
&showlist);
|
&showprintlist);
|
||||||
|
|
||||||
add_show_from_set
|
add_show_from_set
|
||||||
(add_set_cmd ("asm-demangle", class_support, var_boolean,
|
(add_set_cmd ("asm-demangle", class_support, var_boolean,
|
||||||
(char *)&asm_demangle,
|
(char *)&asm_demangle,
|
||||||
"Set demangling of C++ names in disassembly listings.",
|
"Set demangling of C++ names in disassembly listings.",
|
||||||
&setlist),
|
&setprintlist),
|
||||||
&showlist);
|
&showprintlist);
|
||||||
}
|
}
|
||||||
|
|
|
@ -505,19 +505,14 @@ val_print_fields (type, valaddr, stream, format, recurse, pretty, dont_print)
|
||||||
}
|
}
|
||||||
if (TYPE_FIELD_PACKED (type, i))
|
if (TYPE_FIELD_PACKED (type, i))
|
||||||
{
|
{
|
||||||
LONGEST val;
|
value v;
|
||||||
char *valp = (char *) & val;
|
|
||||||
|
|
||||||
val = unpack_field_as_long (type, valaddr, i);
|
/* Bitfields require special handling, especially due to byte
|
||||||
|
order problems. */
|
||||||
|
v = value_from_long (TYPE_FIELD_TYPE (type, i),
|
||||||
|
unpack_field_as_long (type, valaddr, i));
|
||||||
|
|
||||||
/* Since we have moved the bitfield into a long,
|
val_print (TYPE_FIELD_TYPE (type, i), VALUE_CONTENTS (v), 0,
|
||||||
if it is declared with a smaller type, we need to
|
|
||||||
offset its address *in gdb* to match the type we
|
|
||||||
are passing to val_print. */
|
|
||||||
#if HOST_BYTE_ORDER == BIG_ENDIAN
|
|
||||||
valp += sizeof val - TYPE_LENGTH (TYPE_FIELD_TYPE (type, i));
|
|
||||||
#endif
|
|
||||||
val_print (TYPE_FIELD_TYPE (type, i), valp, 0,
|
|
||||||
stream, format, 0, recurse + 1, pretty);
|
stream, format, 0, recurse + 1, pretty);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1805,49 +1800,77 @@ set_radix (arg, from_tty, c)
|
||||||
set_output_radix (arg, 0, c);
|
set_output_radix (arg, 0, c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct cmd_list_element *setprintlist = NULL;
|
||||||
|
struct cmd_list_element *showprintlist = NULL;
|
||||||
|
|
||||||
|
/*ARGSUSED*/
|
||||||
|
static void
|
||||||
|
set_print (arg, from_tty)
|
||||||
|
char *arg;
|
||||||
|
int from_tty;
|
||||||
|
{
|
||||||
|
printf (
|
||||||
|
"\"set print\" must be followed by the name of a print subcommand.\n");
|
||||||
|
help_list (setprintlist, "set print ", -1, stdout);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*ARGSUSED*/
|
||||||
|
static void
|
||||||
|
show_print (args, from_tty)
|
||||||
|
char *args;
|
||||||
|
int from_tty;
|
||||||
|
{
|
||||||
|
cmd_show_list (showprintlist, from_tty, "");
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
_initialize_valprint ()
|
_initialize_valprint ()
|
||||||
{
|
{
|
||||||
struct cmd_list_element *c;
|
struct cmd_list_element *c;
|
||||||
|
|
||||||
|
add_prefix_cmd ("print", no_class, set_print,
|
||||||
|
"Generic command for setting how things print.",
|
||||||
|
&setprintlist, "set print ", 0, &setlist);
|
||||||
|
add_prefix_cmd ("print", no_class, show_print,
|
||||||
|
"Generic command for showing print settings.",
|
||||||
|
&showprintlist, "show print ", 0, &showlist);
|
||||||
|
|
||||||
add_show_from_set
|
add_show_from_set
|
||||||
(add_set_cmd ("array-max", class_vars, var_uinteger, (char *)&print_max,
|
(add_set_cmd ("elements", no_class, var_uinteger, (char *)&print_max,
|
||||||
"Set limit on string chars or array elements to print.\n\
|
"Set limit on string chars or array elements to print.\n\
|
||||||
\"set array-max 0\" causes there to be no limit.",
|
\"set print elements 0\" causes there to be no limit.",
|
||||||
&setlist),
|
&setprintlist),
|
||||||
&showlist);
|
&showprintlist);
|
||||||
|
|
||||||
add_show_from_set
|
add_show_from_set
|
||||||
(add_set_cmd ("prettyprint", class_support, var_boolean, (char *)&prettyprint,
|
(add_set_cmd ("pretty", class_support, var_boolean, (char *)&prettyprint,
|
||||||
"Set prettyprinting of structures.",
|
"Set prettyprinting of structures.",
|
||||||
&setlist),
|
&setprintlist),
|
||||||
&showlist);
|
&showprintlist);
|
||||||
|
|
||||||
add_alias_cmd ("pp", "prettyprint", class_support, 1, &setlist);
|
|
||||||
|
|
||||||
add_show_from_set
|
add_show_from_set
|
||||||
(add_set_cmd ("unionprint", class_support, var_boolean, (char *)&unionprint,
|
(add_set_cmd ("union", class_support, var_boolean, (char *)&unionprint,
|
||||||
"Set printing of unions interior to structures.",
|
"Set printing of unions interior to structures.",
|
||||||
&setlist),
|
&setprintlist),
|
||||||
&showlist);
|
&showprintlist);
|
||||||
|
|
||||||
add_show_from_set
|
add_show_from_set
|
||||||
(add_set_cmd ("vtblprint", class_support, var_boolean, (char *)&vtblprint,
|
(add_set_cmd ("vtbl", class_support, var_boolean, (char *)&vtblprint,
|
||||||
"Set printing of C++ virtual function tables.",
|
"Set printing of C++ virtual function tables.",
|
||||||
&setlist),
|
&setprintlist),
|
||||||
&showlist);
|
&showprintlist);
|
||||||
|
|
||||||
add_show_from_set
|
add_show_from_set
|
||||||
(add_set_cmd ("arrayprint", class_support, var_boolean, (char *)&arrayprint,
|
(add_set_cmd ("array", class_support, var_boolean, (char *)&arrayprint,
|
||||||
"Set prettyprinting of arrays.",
|
"Set prettyprinting of arrays.",
|
||||||
&setlist),
|
&setprintlist),
|
||||||
&showlist);
|
&showprintlist);
|
||||||
|
|
||||||
add_show_from_set
|
add_show_from_set
|
||||||
(add_set_cmd ("addressprint", class_support, var_boolean, (char *)&addressprint,
|
(add_set_cmd ("address", class_support, var_boolean, (char *)&addressprint,
|
||||||
"Set printing of addresses.",
|
"Set printing of addresses.",
|
||||||
&setlist),
|
&setprintlist),
|
||||||
&showlist);
|
&showprintlist);
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
/* The "show radix" cmd isn't good enough to show two separate values.
|
/* The "show radix" cmd isn't good enough to show two separate values.
|
||||||
|
|
16
gdb/values.c
16
gdb/values.c
|
@ -26,6 +26,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||||
#include "gdbcore.h"
|
#include "gdbcore.h"
|
||||||
#include "frame.h"
|
#include "frame.h"
|
||||||
#include "command.h"
|
#include "command.h"
|
||||||
|
#include "gdbcmd.h"
|
||||||
|
|
||||||
/* The value-history records all the values printed
|
/* The value-history records all the values printed
|
||||||
by print commands during this session. Each chunk
|
by print commands during this session. Each chunk
|
||||||
|
@ -286,7 +287,7 @@ clear_value_history ()
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
value_history_info (num_exp, from_tty)
|
show_values (num_exp, from_tty)
|
||||||
char *num_exp;
|
char *num_exp;
|
||||||
int from_tty;
|
int from_tty;
|
||||||
{
|
{
|
||||||
|
@ -446,7 +447,7 @@ clear_internalvars ()
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
convenience_info ()
|
show_convenience ()
|
||||||
{
|
{
|
||||||
register struct internalvar *var;
|
register struct internalvar *var;
|
||||||
int varseen = 0;
|
int varseen = 0;
|
||||||
|
@ -1331,15 +1332,16 @@ set_return_value (val)
|
||||||
void
|
void
|
||||||
_initialize_values ()
|
_initialize_values ()
|
||||||
{
|
{
|
||||||
add_info ("convenience", convenience_info,
|
add_cmd ("convenience", no_class, show_convenience,
|
||||||
"Debugger convenience (\"$foo\") variables.\n\
|
"Debugger convenience (\"$foo\") variables.\n\
|
||||||
These variables are created when you assign them values;\n\
|
These variables are created when you assign them values;\n\
|
||||||
thus, \"print $foo=1\" gives \"$foo\" the value 1. Values may be any type.\n\n\
|
thus, \"print $foo=1\" gives \"$foo\" the value 1. Values may be any type.\n\n\
|
||||||
A few convenience variables are given values automatically:\n\
|
A few convenience variables are given values automatically:\n\
|
||||||
\"$_\"holds the last address examined with \"x\" or \"info lines\",\n\
|
\"$_\"holds the last address examined with \"x\" or \"info lines\",\n\
|
||||||
\"$__\" holds the contents of the last address examined with \"x\".");
|
\"$__\" holds the contents of the last address examined with \"x\".",
|
||||||
|
&showlist);
|
||||||
|
|
||||||
add_info ("values", value_history_info,
|
add_cmd ("values", no_class, show_values,
|
||||||
"Elements of value history around item number IDX (or last ten).");
|
"Elements of value history around item number IDX (or last ten).",
|
||||||
add_info_alias ("history", "values", 0);
|
&showlist);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue