我已经使用了 C 代码Trace32
,我想读取 C 宏的值Trace32
。怎么做?宏值会存储在某个寄存器中吗?
例如:
#define DEST_ADD = 0xE432;
address = htonl(DEST_ADD);
如何读取宏的值:DEST_ADD
in Trace32
?
我已经使用了 C 代码Trace32
,我想读取 C 宏的值Trace32
。怎么做?宏值会存储在某个寄存器中吗?
例如:
#define DEST_ADD = 0xE432;
address = htonl(DEST_ADD);
如何读取宏的值:DEST_ADD
in Trace32
?
宏通常由预处理器替换为它们的内容。因此编译器不再“看到”宏名称,因此无法在 ELF 文件中为其创建调试信息。结果,任何调试器都无法知道宏的名称。
但是,一些编译器支持为预处理器宏生成调试信息。例如,如果您使用带有调试级别 3 ( gcc -g3
) 的 GCC,编译器会在您的 ELF 文件中创建一个名为“.debug_macro”的部分。
如果您的 ELF 包含“.debug_macro”部分,则必须通过使用选项“/MACRO”告诉 TRACE32 在加载 ELF 时考虑此部分。所以你加载你的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)
C 预处理器会将代码中的宏替换为它们的值,因此该宏很可能不再存在于生成的目标文件中。但是,您可以只打印变量的值:
Var.PRINT <variable>
您可能还想看看这个:如何检查宏是否存在于 C 中的目标文件中?