【问题标题】:How to print out the content in vector<unique_ptr> with gdb on Mac OS X如何在 Mac OS X 上使用 gdb 打印出 vector<unique_ptr> 中的内容
【发布时间】:2013-06-22 01:07:07
【问题描述】:

我正在尝试在 Mac OS X 上使用 C++11 功能。我下载了带有端口的 g++ 4.8.1。

这是测试代码。

class A
{
    int x;
public:
    A() {}
    ~A() {}
    A(A& a) {}
    A(int x) {this->x = x;}
    int get() {return x;}
};

int main()
{
    vector<unique_ptr<A>> v;
    auto a = new A(10);
    unique_ptr<A> pa(a);
    v.push_back(move(pa)); // move(pa);
    for (auto& i: v)
    {
        cout << i->get();
    }
}

它在 g++ 4.8 下编译得很好,我可以使用 gdb 对其进行调试。在this page 之后,我可以使用vector v 命令打印出STL 向量。

但是,对于带有 unique_ptr 的向量,我在 gdb 中收到了此错误消息。

Cannot perform pointer math on incomplete type "unique_ptr<A, std::default_delet
e<A> >", try casting to a known type, or void *.

它有什么问题?如何使 unique_ptr 完整类型以使用 gdb 获取内容?

添加

我注意到 Xcode 4.5 中的 clang++ 支持 c++11 功能,因此最简单的方法可能是使用 Xcode。不过我的命令行有些问题 (lldb on xcode vs lldb on standalone)

【问题讨论】:

  • 你试过($8)-&gt;get()吗?似乎 $8 是一个指向唯一指针的指针...
  • @Kenny TM:是的,我有:“尝试提取不是结构或联合的值的组件”是一条错误消息。
  • 您可以尝试使用 Ubuntu 虚拟机,我拥有一台 macbook pro,但几乎停止在其中进行 c++ 开发。我把一个 Parallels Ubuntu 实例全屏,忘记了 OS X :-)。太棒了,我从 Ubuntu VM 获得的字体显示比原生 OS X(非视网膜显示)更好imgur.com/a/2DAvL
  • @chico - 我认为 mac 默认有 stdc++:stackoverflow.com/questions/14972425/…

标签: c++ debugging c++11 gdb unique-ptr


【解决方案1】:

Use python printers for GDB,您的打印机似乎已被弃用:

【讨论】:

  • 从端口安装我的GNU gdb (GDB) 7.5 不起作用(相同的打印消息)。我还使用 brew 安装的 gdb 7.6 进行了测试,但它也不起作用。我复制了调试目录中的 .gdbinit 以确保它被读取。
  • @prosseek,它不适用于 libc++,因为您的环境是 OS X,我不确定您是否正在使用它。 GCC python 漂亮的打印机支持 libstdc++。
【解决方案2】:

我可以使用 Xcode; lldb 在 Xcode 上运行良好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多