DPrintf feedback

Marc Khouzam marc.khouzam@ericsson.com
Fri Feb 22 20:37:00 GMT 2013


> -----Original Message-----
> From: Tom Tromey [mailto:tromey@redhat.com] 
> Sent: Friday, February 22, 2013 2:32 PM
> To: Marc Khouzam
> Cc: 'Yao Qi'; 'gdb-patches@sourceware.org'; 'Pedro Alves'; 
> 'Joel Brobecker'; 'Stan Shebs'
> Subject: Re: DPrintf feedback
> 
> >>>>> "Marc" == Marc Khouzam <marc.khouzam@ericsson.com> writes:
> 
> Marc> Such an approach may also help fix the "continue" problem
> Marc> that Yao is trying to address.  I seem to recall that 
> Hui had posted 
> Marc> patches to add some kind of 'printf' tracepoint 
> command.  Maybe that 
> Marc> would be something that can help?
> 
> I thought this was subsumed by "set dprintf-style agent"?

I haven't followed the details, so I can't be sure.
"set dprintf-style agent" makes the dprintf breakpoint 
command be "agent-printf <string>".
I didn't expect that to be something that could be re-used
by a tracepoint command.  But that makes me realize the 
bigger limitation of using tracepoints; tracepoints are
only supported with gdbserver.  I thought a tracepoint
doing the printf would be nice for each case, not just
with gdbserver.  I guess there's a lot more work
needed to first support tracepoints in GDB alone, and
then use them for dprintf.  I missed that detail.

I wonder if you guys feel tracepoints would be a nicer
way to handle dprintf?

> Marc> Other issues I ran across are below.  I wasn't sure 
> opening PRs was
> Marc> the way to do since those issues may disappear if the current 
> Marc> implementation is amended:
> 
> I think it is best to file PRs.  If a patch fixes them all, 
> then that is
> fine.  But if not, then this the only way to avoid losing track.

Will do.

> Marc> - Pagination is triggered for dprintf in CLI mode, at least when
> Marc> using dprintf-style 'gdb'.
> 
> Maybe we need a new "gdb-unfiltered" setting?  Or we could disable
> pagination entirely here, but that maybe leads to other issues.
> 
> Marc> - In Eclipse, the dprintf-style that makes sense is either 
> Marc>   'call' or 'agent'.
> 
> I was surprised to hear this.  Could you say why?

On Linux, Eclipse uses the -inferior-tty-set command to tell GDB
to send the inferior's output to a different console.  So we have
a gdb console and an inferior console.  If we want dprintf to look 
like a real printf, its output needs to be shown in the inferior
console, so it requires GDB to send it to the same tty.  That is
not what "dprintf-style gdb" does, as it sends it to the gdb console.

> Marc> - Output buffering is not behaving as a real printf.  For 
> Marc>   example, if my program does
> Marc>      printf("hello");
> Marc>      printf("friend\n");
> Marc> and I put a dprintf " my " on the second line, 
> Marc> I would expect to see
> Marc>    "hello my friend"
> Marc> but instead I see
> Marc>    " my hellofriend"
> Marc> which shows that the dprintf string does not go to the same 
> Marc> buffer as the real printfs, and is flushed earlier.
> Marc> This also happens with the dprintf-style "agent"
> 
> Which other setting does this happen with?
> I would expect it to work with "call" but not with "gdb".
>
> You could hack around this by disabling buffering for stdout.
> I'm not totally sure it is a bug for it to work the current way by
> default.

I hadn't tried it with "call" because my machine is an Ubuntu,
so the "call" setting does not work.  I managed to get my hands
on a Suse machine and tried it; you are right, "call" prints
things nicely.  I guess the problem is only that "agent" style
does not do that properly.  I'll specify this important point
in the PR.

Thanks for the quick answer.

Marc




More information about the Gdb-patches mailing list