这似乎是一个微不足道的问题,但我找不到答案。
假设我已经定义了一个类Widget
并创建了重载:
std::ostream& operator<< (std::ostream& o, const Widget &w) {...}
有没有办法通过简单地使用上面的重载来检查Widget
中的gdb
对象?
我正在使用gdb版本7.7.1。
编辑:
假设w
是Widget
个对象。我正在尝试这个:
call operator<<(std::cout, w)
并从gdb获取以下错误消息:
(std::ostream &) @0x615120: <incomplete type>
答案 0 :(得分:2)
这对我有用(gdb 7.9.1):
#include <iostream>
struct Foo {
int i = 17;
};
std::ostream& operator<<(std::ostream &os, const Foo &foo)
{
os << "i: " << foo.i << "\n";
return os;
}
int main()
{
Foo f;
f.i = 40;
std::cout << f;
}
我像这样编译它(gcc 5.2):
g ++ -Wall -ggdb -std = c ++ 11 test.cpp
并在gdb下运行
(gdb)br主要断点1位于0x400858:文件test.cpp,第14行。(gdb) r开始程序: /home/evgeniy/projects/study_c++/operator_print_gdb/a.out
断点1,main()at test.cpp:14 14 {(gdb)n 15 Foo f; (GDB) 16 f.i = 40; (gdb)调用运算符&lt;&lt;(std :: cout,f)
(gdb)set var f.i = 5
(gdb)调用运算符&lt;&lt;(std :: cout,f)
并打印17
和5