This is the mail archive of the
gdb@sourceware.org
mailing list for the GDB project.
RFC: GDB as a loader 1/3: silent batch mode
- From: Andrew STUBBS <andrew dot stubbs at st dot com>
- To: gdb at sources dot redhat dot com
- Date: Tue, 18 Oct 2005 12:26:55 +0100
- Subject: RFC: GDB as a loader 1/3: silent batch mode
Hi all,
It is my experience that GDB is often used, by means of the --batch and
--command options, as a mechanism for downloading and running programs
on remote targets (development boards and the like). This may be using a
sledgehammer to crack a nut, but given that a debugger is always
required in these cases and that creating an additional specific loader
requires effort, it is not surprising that it is used for this purpose.
I have therefore created a number of features to make this process a
little more comfortable. I have split them into separate posts so that
they may be discussed separately.
All have been regression tested for both i686-pc-linux-gnu and sh-elf an
have produced no new failures. I have not attempted to produce any new
test cases. Probably there should be some, but where and how?
Silent Batch Mode
The attached patch implements a new option --batch-silent. This does
much the same a --batch, except that it also disables gdb_stdout. This
means that all GDB outputs, other than errors, are hidden.
The advantage of this is that I no longer have to create dodgy scripts
to filter out all the various GDB messages from my program output
(Loading section ..., Process exited successfully, etc.).
Obviously this is not particularly useful with targets such as the GDB
simulator that give their output through the GDB print mechanisms.
However, all targets which print via regular stdout (as our custom
target interface here at ST does) work fine. Perhaps somebody could
suggest a solution for those targets with which it does not work.
This patch does not affect the behaviour of stderr or gdb_stderr - an
error is still an error.
Thanks
Andrew Stubbs
2005-10-18 Andrew Stubbs <andrew.stubbs@st.com>
* event-top.c (gdb_setup_readline): Don't set gdb_stdout when
--batch-silent option was given.
* main.c (batch_silent): New variable.
(captured_main): Add new option --batch-silent.
(print_gdb_help): Likewise.
Index: src/gdb/event-top.c
===================================================================
--- src.orig/gdb/event-top.c 2005-03-16 17:05:31.000000000 +0000
+++ src/gdb/event-top.c 2005-10-17 17:38:27.000000000 +0100
@@ -1110,8 +1110,10 @@ gdb_setup_readline (void)
that the sync setup is ALL done in gdb_init, and we would only
mess it up here. The sync stuff should really go away over
time. */
+ extern batch_silent;
- gdb_stdout = stdio_fileopen (stdout);
+ if (!batch_silent)
+ gdb_stdout = stdio_fileopen (stdout);
gdb_stderr = stdio_fileopen (stderr);
gdb_stdlog = gdb_stderr; /* for moment */
gdb_stdtarg = gdb_stderr; /* for moment */
Index: src/gdb/main.c
===================================================================
--- src.orig/gdb/main.c 2005-10-17 15:29:40.000000000 +0100
+++ src/gdb/main.c 2005-10-17 17:44:35.000000000 +0100
@@ -73,6 +73,9 @@ struct ui_file *gdb_stdtargin;
struct ui_file *gdb_stdtarg;
struct ui_file *gdb_stdtargerr;
+/* Support for the --batch-silent option. */
+int batch_silent = 0;
+
/* Whether to enable writing into executable and core files */
extern int write_files;
@@ -254,6 +257,7 @@ captured_main (void *data)
{"silent", no_argument, &quiet, 1},
{"nx", no_argument, &inhibit_gdbinit, 1},
{"n", no_argument, &inhibit_gdbinit, 1},
+ {"batch-silent", no_argument, 0, 'B'},
{"batch", no_argument, &batch, 1},
{"epoch", no_argument, &epoch_interface, 1},
@@ -384,6 +388,10 @@ captured_main (void *data)
cmdsize * sizeof (*cmdarg));
}
break;
+ case 'B':
+ batch = batch_silent = 1;
+ gdb_stdout = ui_file_new();
+ break;
#ifdef GDBTK
case 'z':
{
@@ -834,6 +842,7 @@ Options:\n\n\
fputs_unfiltered (_("\
-b BAUDRATE Set serial port baud rate used for remote debugging.\n\
--batch Exit after processing options.\n\
+ --batch-silent As for --batch, but suppress all gdb stdout output.\n\
--cd=DIR Change current directory to DIR.\n\
--command=FILE Execute GDB commands from FILE.\n\
--core=COREFILE Analyze the core dump COREFILE.\n\