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