std::unique_ptr
좋은데, DDD 또는 gdb에서 디버깅 할 때 편안함을 느낍니다.DDD (또는 gdb)에서 unique_ptr을 사용하여 C++ 11 코드를 디버깅하는 방법은 무엇입니까?
저는 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
이 바보 같은 질문처럼 들리 겠지만,하지만 당신은을 구축해야했다 처음부터 상자에 gcc 컴파일러? RPM 업데이트였습니까? 최근에 gdb에서 C++ 11 코드를 디버깅 할 때 문제가 발생하여 gdb를 다시 컴파일하지 못하는 것으로 나타났습니다. 나는 그것이 사실이 아니라고 확신하지만, 물을만한 가치가 있다고 생각했다. – Welshboy
@Welshboy 현재 공식 gcc 4.8.2 (20140206)와 gdb 7을 사용하고 있습니다.7 아치 리눅스에서. –
다음을 시도해보십시오. http://stackoverflow.com/questions/322322/displaying-dereferenced-stl-iterators-in-gdb 특히 gdbinit 파일을 살펴보십시오. gdb가 할 수있는 많은 것들이있는 것 같습니다. 행운을 빕니다. – Ben