你如何從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