2014-09-04 2 views
2
struct tree{ 
#ifdef A 
    #define TREE_GET(x,y)  &x->y 
#else 
    #define TREE_GET(x,y)  x->y 
#endif 
}; 

매크로 A가 정의되었는지 알고 싶습니다. gdb에서 사용할 수있는 명령이 있습니까?gdb를 사용하여 소스 코드를 디버깅하는 동안 매크로가 정의되어 있는지 여부를 판단하는 방법은 무엇입니까?

+1

'TREE_GET'을 정의하는 것 외에 전역 변수를 설정하는 방법은 어떻습니까? 'A' 또는'TREE_GET'의 정의를 검사 할 수는 없지만, 변수는 아무런 문제가 없는지 확인할 수 있습니다 ... – DevSolar

답변

4

컴파일 타임에 컴파일러에서 디버깅 정보의 선행 처리기 매크로에 대한 정보를 포함하도록 -gdwarf-2 및 -g3 플래그를 전달합니다. gcc documentation on -g3에서

info macro A 

: -g3 및 GDB 월호 등을 사용

, g++ -gdwarf-2 -g3 program.cpp -o program

C Preprocessor Macros

2

컴파일

-glevel

...

레벨 3은 프로그램 내에 존재하는 모든 매크로 정의와 같은 추가 정보를 포함한다. 일부 디버거는 -g3을 사용할 때 매크로 확장을 지원합니다. gdb documenation on info macro & friends에서

:

정보 매크로 [-a | -all] [-] 매크로

는 현재 정의 또는 명명 된 매크로의 모든 정의를 표시하고, 소스를 설명 위치 또는 컴파일러 명령 줄이 정의 된 위치. 선택적 이중 대시는 매크로가 하이픈으로 시작될 수있는 비 C와 유사한 매크로의 인수 처리 종료 및 매크로 시작을 나타냅니다.

관련 문제