2017-09-14 14 views
2

Trace32에 C 코드를 사용했으며 Trace32에 C 매크로의 값을 읽고 싶습니다. 그렇게하는 방법? 매크로 값이 일부 레지스터에 저장됩니까?trace32를 사용하여 매크로 값 읽기

예 : Trace32DEST_ADD : 나는 매크로의 값을 읽을 어떻게

#define DEST_ADD = 0xE432; 
address = htonl(DEST_ADD); 

?

답변

1

C 사전 처리기는 코드의 매크로를 해당 값으로 대체하므로 결과 개체 파일에 매크로가 더 이상 존재하지 않을 가능성이 있습니다. 그러나 당신은 대신 변수의 값을 인쇄 할 수 있습니다 How to check if a macro exists in an object file in C?

3

매크로는 일반적으로 전처리하여 그 내용으로 대체됩니다 : 당신이 좀보고 할 수 있습니다

Var.PRINT <variable> 

. 따라서 컴파일러는 더 이상 매크로 이름을 "보지"않으므로 ELF 파일에 매크로 정보를 디버그 할 수 없습니다. 결과적으로 모든 디버거는 매크로의 이름을 알 수 없습니다.

그러나 일부 컴파일러는 선행 처리기 매크로에 대한 디버그 정보 생성을 지원합니다. 예 : 디버그 레벨 3 (gcc -g3)의 GCC를 사용하는 경우 컴파일러는 ELF 파일에 ".debug_macro"라는 섹션을 만듭니다.

ELF에 ".debug_macro"섹션이 포함되어 있으면 "/ MACRO"옵션을 사용하여 ELF를로드 할 때이 섹션을 고려하도록 TRACE32에 지시해야합니다. 그래서 당신은 당신의 ELF의 예를로드

Data.LOAD.Elf * /MACRO 

그런 다음 sYmbol.List.MACRO 창에 모든 처리기 매크로를 참조하거나 Var.WATCH 창에 그 중 하나를 사용하거나 Var.PRINT 명령으로를 Var.VALUE() 기능에 액세스하거나 인쇄 할 수 있습니다 . 예 :

Var.Watch UINT32_MAX 
Var.PRINT UINT32_MAX 
PRINT %Decimal Var.VALUE(UINT32_MAX)