【问题标题】:How to get debug information for an abstract(?) pimpl in C++?如何在 C++ 中获取抽象(?)pimpl 的调试信息?
【发布时间】:2009-03-06 05:13:40
【问题描述】:

我有一个包装类,它将其工作委托给一个 pimpl,而 pimpl 是一个指向基类/接口的指针,没有以几种不同方式专门化的数据。

像这样:

class Base
{
    void doStuff=0;
};

class Derived
{
    int x,y;
    void doStuff()
    {
        x = (x+y*2)*x; //whatever
    }
};

class Wrapper
{
    Base*   _pimpl;
    void doStuff()
    {
        _pimpl->doStuff();
    }
};

现在这在大多数情况下都可以正常工作,但是当进入调试器时,我无法查看 Derived 类的 x,y (因为它可能是任何东西)。通常这是无关紧要的,但是当出现问题时,查看 Derived 的状态可能很重要,但是 pimpl 过于模糊了状态(但是这是 pimpl 的原始想法,所以我想我真的不能抱怨)。

现在我有一个 tostring() 函数,可以将状态打印出来以进行调试,但想知道是否有更好的解决方案,特别是在 VisualStudio 中调试这种结构,但一般的解决方案会更好。

谢谢

【问题讨论】:

    标签: c++ visual-studio debugging pimpl-idiom


    【解决方案1】:

    您是否尝试在监视窗口中将变量转换为 Derived*?

    【讨论】:

    • 是的,这行得通,到目前为止很好,但希望有人有一个神奇的解决方案:)
    【解决方案2】:

    只需在 Autos 窗口或 Watch 窗口之一中继续展开树:

    alt text http://www.freeimagehosting.net/uploads/626b4a37ee.png

    【讨论】:

    • 嗯,好吧,但我的实际代码比这更复杂,它不能正常工作......让我弄清楚为什么它不能工作......
    • 如果您是从一个不可见 impl 类声明的编译单元执行此操作,那么它是不可见的
    • 你的标签里有什么乱七八糟的... ;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多