2

我已经使用了 C 代码Trace32,我想读取 C 宏的值Trace32。怎么做?宏值会存储在某个寄存器中吗?

例如:

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

如何读取宏的值:DEST_ADDin Trace32

4

2 回答 2

3

宏通常由预处理器替换为它们的内容。因此编译器不再“看到”宏名称,因此无法在 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)
于 2017-09-14T12:01:10.503 回答
1

C 预处理器会将代码中的宏替换为它们的值,因此该宏很可能不再存在于生成的目标文件中。但是,您可以只打印变量的值:

Var.PRINT <variable>

您可能还想看看这个:如何检查宏是否存在于 C 中的目标文件中?

于 2017-09-14T09:35:40.193 回答