[Debugging output] Make remote packet truncation length adjustable
authorLuis Machado <luis.machado@linaro.org>
Mon, 25 Nov 2019 15:27:44 +0000 (12:27 -0300)
committerLuis Machado <luis.machado@linaro.org>
Mon, 25 Nov 2019 15:27:44 +0000 (12:27 -0300)
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

gdb/ChangeLog
gdb/NEWS
gdb/doc/ChangeLog
gdb/doc/gdb.texinfo
gdb/remote.c

index 3b656f48864e639e8fa92053b9d78fd63bf52142..45ff42a6c0fc1e91585ee636f63a5d19dc92ebae 100644 (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.
index b0f54473e2f39675c955df357f26c4437e086134..01b38cf9bd80abfaf6f2d13c86967aa7e0e4ccca 100644 (file)
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -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
index 25718395bf0c79e7bd328cc08549a4d8ef2be4a4..c6fa5f573ea68b05bac478f838a05235d67df764 100644 (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.
index c66a39cf6fc508b8d90144ebe255a6f518e6686f..18bb18b2245c7ad5e49af6e1616b1f36bfa56da6 100644 (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
index 1ac9013408dbc57f6b61bf2aef7d1768905f5196..3fc9a2608e637380329004af0517b63ca6386628 100644 (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);
 }