std::unique_ptr
很好,但我發現他們在DDD或gdb調試時不太舒服。如何在DDD(或gdb)中用unique_ptr調試C++ 11代碼?
我使用gdb漂亮的打印機,它是gcc的一部分(例如,/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*.>
有沒有辦法來調試C++代碼11與DDD的unique_ptr(沒有打破就像我與我的累贅解決方法做了工作流程)?
我不害怕使用gdb命令,但DDD集成將是一個加號。例如,通過雙擊數據結構中的指針往往比鍵入更快。
我已經嘗試刪除漂亮的打印機,但它也不是最佳的。我能想出的最好的是以下幾點:
print pTest._M_t->_M_head_impl
可能聽起來像一個愚蠢的問題,但你必須建立gcc編譯器在你的盒子上從頭開始?或者它是一個RPM更新?我最近在嘗試調試一些C++ 11代碼時遇到了gdb問題,並發現我不會重新編譯gdb。我很確定這不是這種情況,但我認爲這可能值得提問。 – Welshboy
@Welshboy我目前使用官方的gcc 4.8.2(20140206)和gdb 7。7來自Arch Linux。 –
你可以試試這個:http://stackoverflow.com/questions/322322/displaying-dereferenced-stl-iterators-in-gdb,特別是看看gdbinit文件。看起來有很多自定義的東西可以讓gdb做。祝你好運。 – Ben