[Debugging output] Make remote packet truncation length adjustable

While debugging, i felt the need to adjust the truncation length of remote
packets so i could see more or less data as needed. The default is currently
set to 512 bytes.

This patch makes this option adjustable through the new "set debug
remote-packet-max-chars" command. It can be set to unlimited if we want to
completely disable truncation.

Update on v5:

- Adjusted function and variable documentation, NEWS entry and GDB manual.

gdb/ChangeLog:

2019-11-25  Luis Machado  <luis.machado@linaro.org>

	* NEWS (New Commands): Mention "set debug remote-packet-max-chars".
	* remote.c (REMOTE_DEBUG_MAX_CHAR): Remove.
	(remote_packet_max_chars): New static global.
	(show_remote_packet_max_chars): New function.
	(remote_target::putpkt_binary): Adjust to use new
	remote_packet_max_chars option.
	(remote_target::getpkt_or_notif_sane_1): Likewise.
	(_initialize_remote): Register new remote-packet-max-chars option.

gdb/doc/ChangeLog:

2019-11-25  Luis Machado  <luis.machado@linaro.org>

	* gdb.texinfo (Debugging Output): Document set debug
	remote-packet-max-chars.

Change-Id: I2e871b37bfcaa6376537c3fe3db8f016dd806a7c
This commit is contained in:
Luis Machado 2019-11-25 12:27:44 -03:00
parent bb2942085c
commit 6cc8564b9a
5 changed files with 79 additions and 11 deletions

View File

@ -1,3 +1,14 @@
2019-11-25 Luis Machado <luis.machado@linaro.org>
* NEWS (New Commands): Mention "set debug remote-packet-max-chars".
* remote.c (REMOTE_DEBUG_MAX_CHAR): Remove.
(remote_packet_max_chars): New static global.
(show_remote_packet_max_chars): New function.
(remote_target::putpkt_binary): Adjust to use new
remote_packet_max_chars option.
(remote_target::getpkt_or_notif_sane_1): Likewise.
(_initialize_remote): Register new remote-packet-max-chars option.
2019-11-24 Simon Marchi <simon.marchi@efficios.com>
* m68k-linux-nat.c: Include gdbarch.h.

View File

@ -186,6 +186,12 @@ info module variables [-q] [-m MODULE_REGEXP] [-t TYPE_REGEXP] [REGEXP]
TYPE_REGEXP matches against the variable type, and REGEXP matches
against the variable name.
set debug remote-packet-max-chars
show debug remote-packet-max-chars
Controls the number of characters to output in a remote packet when using
"set debug remote".
The default is 512 bytes.
* Changed commands
help

View File

@ -1,3 +1,8 @@
2019-11-25 Luis Machado <luis.machado@linaro.org>
* gdb.texinfo (Debugging Output): Document set debug
remote-packet-max-chars.
2019-11-14 Tom de Vries <tdevries@suse.de>
* gdb.texinfo: Fix typos.

View File

@ -26274,6 +26274,19 @@ the serial line to the remote machine. The info is printed on the
@item show debug remote
Displays the state of display of remote packets.
@item set debug remote-packet-max-chars
Sets the maximum number of characters to display for each remote packet when
@code{set debug remote} is on. This is useful to prevent @value{GDBN} from
displaying lengthy remote packets and polluting the console.
The default value is @code{512}, which means @value{GDBN} will truncate each
remote packet after 512 bytes.
Setting this option to @code{unlimited} will disable truncation and will output
the full length of the remote packets.
@item show debug remote-packet-max-chars
Displays the number of bytes to output for remote packet debugging.
@item set debug separate-debug-file
Turns on or off display of debug output about separate debug file search.
@item show debug separate-debug-file

View File

@ -1041,11 +1041,6 @@ static struct cmd_list_element *remote_show_cmdlist;
static bool use_range_stepping = true;
/* The max number of chars in debug output. The rest of chars are
omitted. */
#define REMOTE_DEBUG_MAX_CHAR 512
/* Private data that we'll store in (struct thread_info)->priv. */
struct remote_thread_info : public private_thread_info
{
@ -1712,6 +1707,23 @@ show_hardware_breakpoint_limit (struct ui_file *file, int from_tty,
"breakpoints is %s.\n"), value);
}
/* Controls the maximum number of characters to display in the debug output
for each remote packet. The remaining characters are omitted. */
static int remote_packet_max_chars = 512;
/* Show the maximum number of characters to display for each remote packet
when remote debugging is enabled. */
static void
show_remote_packet_max_chars (struct ui_file *file, int from_tty,
struct cmd_list_element *c,
const char *value)
{
fprintf_filtered (file, _("Number of remote packet characters to "
"display is %s.\n"), value);
}
long
remote_target::get_memory_write_packet_size ()
{
@ -9119,15 +9131,21 @@ remote_target::putpkt_binary (const char *buf, int cnt)
*p = '\0';
int len = (int) (p - buf2);
int max_chars;
if (remote_packet_max_chars < 0)
max_chars = len;
else
max_chars = remote_packet_max_chars;
std::string str
= escape_buffer (buf2, std::min (len, REMOTE_DEBUG_MAX_CHAR));
= escape_buffer (buf2, std::min (len, max_chars));
fprintf_unfiltered (gdb_stdlog, "Sending packet: %s", str.c_str ());
if (len > REMOTE_DEBUG_MAX_CHAR)
if (len > max_chars)
fprintf_unfiltered (gdb_stdlog, "[%d bytes omitted]",
len - REMOTE_DEBUG_MAX_CHAR);
len - max_chars);
fprintf_unfiltered (gdb_stdlog, "...");
@ -9563,16 +9581,23 @@ remote_target::getpkt_or_notif_sane_1 (gdb::char_vector *buf,
{
if (remote_debug)
{
int max_chars;
if (remote_packet_max_chars < 0)
max_chars = val;
else
max_chars = remote_packet_max_chars;
std::string str
= escape_buffer (buf->data (),
std::min (val, REMOTE_DEBUG_MAX_CHAR));
std::min (val, max_chars));
fprintf_unfiltered (gdb_stdlog, "Packet received: %s",
str.c_str ());
if (val > REMOTE_DEBUG_MAX_CHAR)
if (val > max_chars)
fprintf_unfiltered (gdb_stdlog, "[%d bytes omitted]",
val - REMOTE_DEBUG_MAX_CHAR);
val - max_chars);
fprintf_unfiltered (gdb_stdlog, "\n");
}
@ -14723,6 +14748,14 @@ of time passes without a response from the target, an error occurs."),
show_watchdog,
&setlist, &showlist);
add_setshow_zuinteger_unlimited_cmd ("remote-packet-max-chars", no_class,
&remote_packet_max_chars, _("\
Set the maximum number of characters to display for each remote packet."), _("\
Show the maximum number of characters to display for each remote packet."), _("\
Specify \"unlimited\" to display all the characters."),
NULL, show_remote_packet_max_chars,
&setdebuglist, &showdebuglist);
/* Eventually initialize fileio. See fileio.c */
initialize_remote_fileio (remote_set_cmdlist, remote_show_cmdlist);
}