在gdb中打印对象值

时间:2015-11-11 16:17:06

标签: c++ gdb

这似乎是一个微不足道的问题,但我找不到答案。

假设我已经定义了一个类Widget并创建了重载:

std::ostream& operator<< (std::ostream& o, const Widget &w) {...}

有没有办法通过简单地使用上面的重载来检查Widget中的gdb对象?

我正在使用gdb版本7.7.1。

编辑

假设wWidget个对象。我正在尝试这个:

call operator<<(std::cout, w)

并从gdb获取以下错误消息:

(std::ostream &) @0x615120: <incomplete type>

1 个答案:

答案 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)

并打印175