Right -- gdb does not know the complete type of std::cout and
std::cerr -- try the following program with -g and invoke print, or <<
in the debugger -- see what you will get:

#include <iostream>
using namespace std;

class A {
public:
int i;
};

__attribute__((noinline)) void print (ostream& os, const A& a) { os <<
a.i << endl ; }

__attribute__((noinline)) void operator<< (ostream& os,  const A& a)
{
   os << a.i << endl;
}


int main()
{

   A a;

   cout << a;
   print (cout, a);

On Tue, Nov 20, 2012 at 4:37 PM, Lawrence Crowl <cr...@googlers.com> wrote:
> On 11/20/12, Xinliang David Li <davi...@google.com> wrote:
>> one minus -- less gdb friendly.
>
> Do you mean that gdb does not handle the stream expressions
> or something else?
>
>>
>> David
>>
>> On Tue, Nov 20, 2012 at 4:16 PM, Lawrence Crowl <cr...@googlers.com> wrote:
>>> On 11/20/12, Diego Novillo <dnovi...@google.com> wrote:
>>>> On Nov 20, 2012 Basile Starynkevitch <bas...@starynkevitch.net> wrote:
>>>> > On Tue, Nov 20, 2012 at 11:24:40AM -0800, Lawrence Crowl wrote:
>>>> > > function (FILE *, item_to_dump, formatting)
>>>> > > function (item_to_dump, formatting)
>>>> >
>>>> > Since we have switched to C++, it would be really nice to have
>>>> > dump functions writing to a C++ std::ostream
>>>>
>>>> I'm not sure what to think about using streams.  I have no great
>>>> familiarity with them, so I can't say whether they provide any
>>>> concrete advantages over dumping to FILE objects.  Additionally,
>>>> the rest of the compiler uses FILE objects for I/O.  How do the
>>>> two stay in sync?
>>>
>>> There are two big advantages.  First, you can concisely output a
>>> bunch of stuff without having to worry about types.  Very good for
>>> quick coding.
>>>
>>>    std::cout << "My variable is " << varnode
>>>              << " and its type is " << typnode
>>>              << std::endl;
>>>
>>> Second, the streams write to an output stream, which can be a
>>> file or it can be a string buffer.  So, output isn't essentially
>>> different from writing chars to a string.
>>>
>>> The primary disadvantage is that to exploit that those advantages,
>>> you need to convert all of the debugging/dumping I/O to use streams.
>>>
>>> And, as a side note, highly formatted output generally is not
>>> much better than printf.  For any text that needs to be localized,
>>> I recommend that we stick with what we have.
>>>
>>> --
>>> Lawrence Crowl
>>
>
>
> --
> Lawrence Crowl

Reply via email to