你如何从gdb内部拨打operator<<(std::ostream &os, const ClassX &x)
?主叫运营商<< in gdb
换句话说,你如何在gdb中打印对象?
call std::cout<<x
或call operator<<(std::cout, x)
似乎不适合我!
任何想法?
你如何从gdb内部拨打operator<<(std::ostream &os, const ClassX &x)
?主叫运营商<< in gdb
换句话说,你如何在gdb中打印对象?
call std::cout<<x
或call operator<<(std::cout, x)
似乎不适合我!
任何想法?
我发现的唯一办法是这样的:
call 'operator<<(std::ostream&, myclass&)'(mycout, c)
由于std::cout
并不是GDB出于某种原因可见,我不得不求助于创造我自己是这样的:
std::ostream mycout(std::cout.rdbuf());
你没有说明有任何理由要这样做,但不会print yourvariable
更容易?
如果这是绝对必须的,您可以在您的课堂上使用Print
方法,并从operator<<
调用该方法,然后从gdb调用对象的Print
方法。
请注意,标准输出可能被缓冲在gdb中,所以除非您以某种方式重定向,否则您将不会看到任何输出。
请参阅this来自gdb的邮件存档关于此问题的讨论。
您还可以定义像函数:
define printType
call operator<<(std::ostream&, const $arg0 &)(std::cerr, $arg1)
end
而且使用它像:
平面广告类型ClassX objectOfClassX
对我来说call operator<<
运行,没有错误,但没有打印。原来我需要致电flush
。这里有一个有用的功能,你可以在.gdbinit
中输入:
define str
call (void)operator<<(std::cout, $arg0)
call (void)std::cout.flush()
printf "\n"
end
我输入命令'print'打印变量和对象。 – 2010-09-30 17:29:54
我正在使用一个类,在这个类中operator <<做了很多信息是可读的,所以使用print和原始数据有点麻烦。 – Ben 2010-09-30 17:53:30