如何在 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 模式,反之亦然?