J'ai quelques problèmes pour essayer de déboguer ce qui semble être des comportements très étranges. Par exemple, nous avons:Problèmes de débogage de la mémoire ARM7
static const char* LOG_FORMAT = "0x%02x,%.5f,";
et le pointeur change pour aucune raison évidente. Parfois à la poubelle, parfois à d'autres chaînes constantes (ou une partie de) définies ailleurs dans le code. Nous voyons aussi parfois le code sauter vers une section différente qui ne devrait pas être en cours d'exécution (la variable d'état semble changer sans qu'on le lui demande). Il y a 2 ou 3 modes de défaillance communs, et ils semblent se produire au hasard. C'est une base de code relativement grande et l'ajout ou la suppression de certaines sections modifie le comportement de l'échec (ou le supprime complètement) même si ces sections ne sont JAMAIS référencées. La meilleure théorie à l'heure actuelle est qu'il s'agit d'un problème lié à la mémoire car nous avons examiné tous les changements récents avec un peigne fin, et le simple fait d'insérer des sections de code pour déplacer les choses semble changer ou supprimez le comportement.
Quelles sont les meilleures façons de voir le débogage ce problème ou des problèmes similaires? J'ai trouvé le débogueur utile à certains moments, et pas à d'autres (mais cela pourrait être une erreur de l'utilisateur).
Notes supplémentaires. ARM7, utilisant Keil μVision 4 et le compilateur armcc v4.1.
Il a été un moment que je travaillais avec ARM7, mais je crois qu'il avait un matériel breakpoints deux disponibles. Définissez-en un à surveiller pour écrire dans la variable de pointeur 'LOG_FORMAT', puis voyez ce qui est en train de le modifier. –
Semble bien UB pour moi, mais vous le saviez probablement déjà. Même comportement bizarre sur un matériel différent mais identique? – yano
Au lieu de pointer directement sur la chaîne, allouez de la mémoire à LOG_FORMAT, puis copiez la chaîne dans LOG_FORMAT. – Rajeshkumar