std::unique_ptr
很好用,但在使用 DDD 或 gdb 调试时,我发现它们不太方便。
我使用的是 gcc 自带的 gdb 漂亮打印机(例如:/usr/share/gcc-4.8.2/python/libstdcxx/v6/printers.py
)。这对于可读性来说是一个很大的收获,例如:
$ print pTest
std::unique_ptr<MyType> containing 0x2cef0a0
然而,取消引用指针不起作用:
$ print *pTest
Could not find operator*.
当我需要访问该值时,我必须手动复制指针并将其强制转换为正确的类型,例如:
print *((MyType*) 0x2cef0a0)
如果该进程仍在运行,则此版本可用(仍然很丑,但更好):
print *pTest.get() // will not work if analyzing a core dump
在DDD中,直接使用Display *pTest
的方法也不起作用。它只会导致以下错误:
<error: Could not find operator*.>
如何在DDD中调试使用unique_ptr的C++11代码(而不像我用笨拙的解决方法那样破坏工作流程)?
我不怕使用gdb命令,但DDD集成会更好。例如,通过双击数据结构中的指针跟踪它们通常比键入要快。
我已经尝试删除漂亮打印器,但这也不是最优解。我能想到的最好的解决方案是以下内容:
print pTest._M_t->_M_head_impl