2017-09-14 3 views
2

J'ai utilisé le code C dans Trace32 et je souhaite lire la valeur de la macro C dans Trace32. Comment faire ça? La valeur de macro sera-t-elle stockée dans un registre?Lecture d'une valeur de macro à l'aide de trace32

par exemple:

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

Comment puis-je lire la valeur de macro: DEST_ADD en Trace32?

Répondre

1

Le préprocesseur C remplacera les macros de votre code par leurs valeurs, il y a donc de fortes chances que la macro n'existe plus dans le fichier objet résultant. Cependant, vous pouvez juste imprimer la valeur de la variable à la place:

Var.PRINT <variable> 

Vous pouvez également jeter un oeil à ceci: How to check if a macro exists in an object file in C?

3

Les macros sont généralement remplacées par leur contenu par le préprocesseur. Ainsi, le compilateur ne "voit" plus les noms des macros et ne peut donc pas créer d'informations de débogage dans le fichier ELF. Par conséquent, n'importe quel débogueur ne peut pas connaître les noms des macros.

Toutefois, certains compilateurs prennent en charge la génération d'informations de débogage pour les macros de préprocesseur. Par exemple. Si vous utilisez GCC avec le niveau de débogage 3 (gcc -g3), le compilateur crée une section appelée ".debug_macro" dans votre fichier ELF.

Si votre fichier ELF contient la section ".debug_macro", vous devez dire à TRACE32 de considérer cette section lors du chargement de ELF, en utilisant l'option "/ MACRO". Donc, vous chargez votre exemple ELF avec

Data.LOAD.Elf * /MACRO 

Vous pouvez alors voir toutes vos macros préprocesseur dans la fenêtre sYmbol.List.MACRO ou utiliser l'un d'eux dans la fenêtre Var.WATCH, ou les accès à la fonction Var.VALUE() ou les imprimer avec la commande Var.PRINT . E.g .:

Var.Watch UINT32_MAX 
Var.PRINT UINT32_MAX 
PRINT %Decimal Var.VALUE(UINT32_MAX)