std::unique_ptr
are nice, but I find them less comfortable when debugging in DDD or gdb.
I'm using the gdb pretty printers that are part of gcc (e.g., /usr/share/gcc-4.8.2/python/libstdcxx/v6/printers.py
). That is a big win for readability, for example:
$ print pTest
std::unique_ptr<MyType> containing 0x2cef0a0
However, dereferencing the pointer does not work:
$ print *pTest
Could not find operator*.
When I need to access the value, I have to manually copy the pointer and cast it to the correct type, for example:
print *((MyType*) 0x2cef0a0)
If the process is still running, this version works (still ugly but better):
print *pTest.get() // will not work if analyzing a core dump
The straightforward approach to Display *pTest
in DDD does not work either. It only results in the following error:
<error: Could not find operator*.>
Is there a way to debug C++11 code with unique_ptr in DDD (without breaking the workflow like I do with my cumbersome workarounds)?
I'm not afraid to use gdb commands, but DDD integration would be a plus. For example, following pointers in data structures by just double-clicking on them is often faster than typing.
I already tried to drop the pretty printer, but it is also not optimal. The best that I could come up with is the following:
print pTest._M_t->_M_head_impl
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…