Чтение значения макроса с помощью trace32

Я использовал код C в Trace32 и хочу прочитать значение макроса C в Trace32. Как это сделать? Будет ли значение макроса храниться в каком-то регистре?

eg:

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

Как прочитать значение макроса: DEST_ADD в Trace32?


person user7478398    schedule 14.09.2017    source источник


Ответы (2)


Макросы обычно заменяются их содержимым препроцессором. Таким образом, компилятор больше не «видит» имена макросов и, следовательно, не может создавать для них отладочную информацию в файле ELF. В результате ни один отладчик не может знать имена макросов.

Однако некоторые компиляторы поддерживают создание отладочной информации для макросов препроцессора. Например. если вы используете GCC с уровнем отладки 3 (gcc -g3), компилятор создает раздел с именем ".debug_macro" в вашем файле ELF.

Если ваш ELF содержит раздел ".debug_macro", вы должны сообщить TRACE32, чтобы он учитывал этот раздел при загрузке ELF, используя опцию "/MACRO". Итак, вы загружаете свой ELF, например, с помощью

 Data.LOAD.Elf * /MACRO

Затем вы можете увидеть все свои макросы препроцессора в окне sYmbol.List.MACRO или использовать любой из них в окне Var.WATCH, или получить к ним доступ с помощью функции Var.VALUE(), или распечатать их с помощью команды Var.PRINT. Например.:

 Var.Watch UINT32_MAX
 Var.PRINT UINT32_MAX
 PRINT %Decimal Var.VALUE(UINT32_MAX)
person Holger    schedule 14.09.2017

Препроцессор C заменит макросы в вашем коде их значениями, поэтому есть большая вероятность, что макрос больше не существует в результирующем объектном файле. Однако вместо этого вы можете просто напечатать значение переменной:

Var.PRINT <variable>

Вы также можете взглянуть на это: Как проверить, существует ли макрос в объектном файле в C?

person dev15    schedule 14.09.2017