This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Target stderr not displayed thru MI




Nick Roberts wrote:

>
> > Nick,
> >
> > The mi->err is used for displaying debugger errors, not the error coming
> > from the target execution.
> > The main problem with MI is that we can not distinguish target stdout
> > from target stderr.
>
>In that case, can you create a new MI channel? e.g.
>
>
>
I'm not sure creating a new mi stream is on fashion, but I'm not opposed
to that.

My original problem was the following:
 >   When debugging a program thru Eclipse or any front end using MI,
 >   the stderr of the debugged program is lost.
 >   This problem occures only on remote targets since native ones don't
 >   use MI stream for output.

Your solution won't fix my problem since current Eclipse uses MI 1 and will
never recognize the new prefix.
What we can do is creating a new error stream mi->targerr but with a prefix
that will be:
- the same than the mi->targ for MI 1 and 2, means "@"
- a new one like you proposed for MI versoin > 2: "#" for instance.


I attach a new patch in that sense. It does not include the documentation patch about MI new stream but it's just to give you an idea.
Any comment ?


Denis


2005-12-01  Denis Pilat  <denis.pilat@st.com>

	* mi-interp.c (mi_interpreter_resume): Route target error through the MI.
	(struct mi_interp): Add field targerr.
	(mi_interpreter_init): Initialize mi target error stream.

Index: mi/mi-interp.c
===================================================================
--- mi/mi-interp.c	(revision 224)
+++ mi/mi-interp.c	(working copy)
@@ -40,6 +40,7 @@
   struct ui_file *err;
   struct ui_file *log;
   struct ui_file *targ;
+  struct ui_file *targerr;
   struct ui_file *event_channel;
 
   /* This is the interpreter for the mi... */
@@ -86,6 +87,15 @@
   mi->err = mi_console_file_new (raw_stdout, "&", '"');
   mi->log = mi->err;
   mi->targ = mi_console_file_new (raw_stdout, "@", '"');
+
+  /* MI 1 and 2 target error stream use the same steam prefix "@" in oder
+     to ensure backward compatibility with old frondtend, MI 3 uses
+     a new prefix "#" */
+  if (mi_version (uiout) > 2)
+    mi->targerr = mi_console_file_new (raw_stdout, "#", '"');
+  else
+    mi->targerr = mi_console_file_new (raw_stdout, "@", '"');
+
   mi->event_channel = mi_console_file_new (raw_stdout, "=", 0);
 
   return mi;
@@ -119,6 +129,8 @@
   gdb_stdlog = mi->log;
   /* Route target output through the MI. */
   gdb_stdtarg = mi->targ;
+  /* Route target error through the MI error stream. */
+  gdb_stdtargerr = mi->targerr;
 
   /* Replace all the hooks that we know about.  There really needs to
      be a better way of doing this... */


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]