2012-02-29 4 views
1

코어 덤프를 디버깅하려고하고 C++의 템플릿 클래스를 사용하여 구현 된 변수에 액세스하려고합니다.GDB의 C++ 템플릿 변수에 액세스

본인은 심볼의 하나로서 다음이 내 실행 파일 심볼의 objdump를 촬영 한 hmapnspace::HandleMapParameters<(hmapnspace::HandleType)1>::m_arHandleArray

하지만 GDB에서이 변수에 액세스 할 때 그것은 나에게 다음과 같은 오류 제공 :

(gdb) p hmapnspace::HandleMapParameters<(hmapnspace::HandleType)1>::m_arHandleArray 
No type "HandleMapParameters<(hmapnspace::HandleType)1>" within class or namespace "hmapnspace". 

어떻게이 변수에 올바르게 액세스 할 수 있습니까?

답변

2

때때로 gdb는 C++ 프로그램의 이름에 대해 겉보기에는 이상한 아이디어를 가지고 있습니다. 극복하기 위해,

print 'hmapnspace::HandleMapPar 

를 입력 시도하고 (당신이 그것을 사용해야하는, 작은 따옴표를 참고) 완료 탭을 누릅니다.

또한 변수의 주소를 파악하고 이름이 범위에없는 값을 볼 필요가있을 때 뭔가 같은

print *(int*) 0xdeadbabe 

핸디 말할 수 있습니다.

+0

답변 해 주셔서 감사합니다. 나는 이미 변수를 액세스하려고 시도했으나 변수가 무분별한 메모리 영역을 가리키고 있다고 말한다. 내가 올바른/예상 값을주는이 데이터 구조에서 참조를 가지고 이것이 올바르지 않다는 것을 압니다. – user1159389

+0

작은 따옴표로 인해 문제가 해결되었습니다. 그것을 제안 해 줘서 고마워. 그러한 특이성을 설명하는 참조 페이지가 있다면 알려 주시면 매우 감사하겠습니다! –

1

나는 정적 멤버 변수이다. 그렇지 않다면 올바른 상황 (프레임)에 있습니까?

Tab을 n.m과 같이 누르십니까? 제안? 나는 gdb가 명령 행에서 typecasting을 잘 처리하지 못한다는 것을 알아 차렸다.

마지막으로 최신 버전의 gdb (예 : 7.2)는 이전 버전보다 훨씬 나은 템플릿을 처리합니다. 예를 들어 템플릿 함수 나 템플릿 클래스 내에서 중단 점을 쉽게 설정할 수 있으며 gdb는 함수의 모든 템플릿 버전에 중단 점을 적절하게 배치합니다. 그러나 이러한 gdb 개선 사항이 현재 수행중인 작업에 적용되는지 여부는 알 수 없습니다.

관련 문제