我在Trace32
中使用了C代碼,我想要讀取Trace32
中的C宏值。怎麼做?將宏值存儲在某個寄存器中嗎?使用trace32讀取宏值
如:
#define DEST_ADD = 0xE432;
address = htonl(DEST_ADD);
我如何讀取宏的值:DEST_ADD
在Trace32
?
我在Trace32
中使用了C代碼,我想要讀取Trace32
中的C宏值。怎麼做?將宏值存儲在某個寄存器中嗎?使用trace32讀取宏值
如:
#define DEST_ADD = 0xE432;
address = htonl(DEST_ADD);
我如何讀取宏的值:DEST_ADD
在Trace32
?
C預處理器將用你的代碼中的宏替換它們的值,所以很有可能在生成的目標文件中宏不再存在。但是,您可以只打印變量的值改爲:
Var.PRINT <variable>
你也可能想看看這個:How to check if a macro exists in an object file in C?
宏通常由預處理其內容所取代。因此,編譯器不再「查看」宏名稱,因此無法在ELF文件中爲其創建調試信息。因此,任何調試器都無法知道宏的名稱。
但是,有些編譯器支持爲預處理器宏生成調試信息。例如。如果您使用調試級別爲3的GCC(gcc -g3
),編譯器會在您的ELF文件中創建一個名爲「.debug_macro」的節。
如果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)