2012-03-05 2 views
15

기본적으로 typeid(*this).name(), 즉 this의 실제 유형을 가져오고 싶습니다.gdb : 일부 데이터의 typeinfo 표시

나는 이것을 GDB에서 (소스 코드를 수정하지 않고) 얻고 싶다. print typeid(*this)을 시도했지만 typeid은 알 수 없습니다 (왜냐하면 내가 소스 파일에 포함하지 않았기 때문입니다).

+0

GDB는'typeid'를 지원하지 않습니다. – trojanfoe

+0

lldb에서 같은 문제가 발생했습니다 ... –

+0

[GDB에서 특정 객체가 특정 C++ 클래스의 인스턴스인지 확인하는 방법] (http://stackoverflow.com/questions/8528979/how-to-determine-whether -g-instance-of-certain-c-class-in-gdb) –

답변

9

이 질문과 관련이있을 수 있습니다 : vtable in polymorphic class of C++ using gdb : 그것은 정확히 유형 ID 아니에요()하지만 다형성 포인터 (기본 클래스에서, 예를 들어 this)을 검사 할 때 실제 개체 유형을 표시해야합니다

(gdb) help set print object 
Set printing of object's derived type based on vtable info. 

. 당연히 vtable (즉, 하나 이상의 가상 메소드)이있는 클래스에서만 작동하지만 typeid도 마찬가지입니다.

3

'ptype [ARG]'명령이이 유형을 인쇄합니다. 이 같은

+2

최소한 gdb v7.6.1에서는이 질문에 도움이되지 않습니다. 다형 유형이 아닌 정적 유형 만 인쇄하기 때문입니다. 예를 들어 "d"가 기본 클래스 "B"에서 파생 된 유형 "D"의 객체 인 경우 'B * b = & d; (gdb) ptype b type = class B {' –

+1

[set print object on]으로 접두어가'type =/* real type = D * * /'로 시작하지만 "whatis"도 마찬가지입니다.] –

20

사용 ptype 명령 :

(gdb) ptype 42 
type = int