如何在 C++ 中获取抽象(?)pimpl 的调试信息?

Posted

技术标签:

【中文标题】如何在 C++ 中获取抽象(?)pimpl 的调试信息?【英文标题】:How to get debug information for an abstract(?) pimpl in C++? 【发布时间】: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 中调试这种结构,但一般的解决方案会更好。

谢谢

【问题讨论】:

【参考方案1】:

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

【讨论】:

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

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

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

【讨论】:

嗯,好吧,但我的实际代码比这更复杂,它不能正常工作......让我弄清楚为什么它不能工作...... 如果您是从一个不可见 impl 类声明的编译单元执行此操作,那么它是不可见的 你的标签里有什么乱七八糟的... ;)

以上是关于如何在 C++ 中获取抽象(?)pimpl 的调试信息?的主要内容,如果未能解决你的问题,请参考以下文章

何时在 C++ 中的嵌套类上使用 Pimpl 模式,反之亦然?

C++ 设计篇之——pimpl 机制

指向 C++ 中类的指针的 PIMPL 习语

C++: The PIMPL idiom

使用 std::unique_ptr 的 C++ Pimpl Idiom 不完整类型

如何使用 Loki 的 Pimpl 实现?