Trace32
에 C 코드를 사용했으며 Trace32
에 C 매크로의 값을 읽고 싶습니다. 그렇게하는 방법? 매크로 값이 일부 레지스터에 저장됩니까?trace32를 사용하여 매크로 값 읽기
예 : Trace32
에 DEST_ADD
: 나는 매크로의 값을 읽을 어떻게
#define DEST_ADD = 0xE432;
address = htonl(DEST_ADD);
?
Trace32
에 C 코드를 사용했으며 Trace32
에 C 매크로의 값을 읽고 싶습니다. 그렇게하는 방법? 매크로 값이 일부 레지스터에 저장됩니까?trace32를 사용하여 매크로 값 읽기
예 : Trace32
에 DEST_ADD
: 나는 매크로의 값을 읽을 어떻게
#define DEST_ADD = 0xE432;
address = htonl(DEST_ADD);
?
C 사전 처리기는 코드의 매크로를 해당 값으로 대체하므로 결과 개체 파일에 매크로가 더 이상 존재하지 않을 가능성이 있습니다. 그러나 당신은 대신 변수의 값을 인쇄 할 수 있습니다 How to check if a macro exists in an object file in C?
매크로는 일반적으로 전처리하여 그 내용으로 대체됩니다 : 당신이 좀보고 할 수 있습니다
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)