Résoudre l’erreur « Module Error! text completion deactivated » lors du Goto Definition dans Keil MDK

Contexte

Dans Keil MDK 5.27 associé à Arm Compiler 6, un message « Module Error! text completion deactivated » peut apparaître lors d’un clic droit sur un symbole puis Goto Definition. Cette erreur interdit la navigation vers la définition et affecte aussi Find All References et la complétion de code. Le phénomène est presque toujours lié au contenu du champ Misc Controls sous l’onglet C/C++ (AC6).

Mécanisme interne

La navigation dans le code repose sur deux modules :

  • Source Browser : construit une base d’index des symboles après le prétraitement et la compilation.
  • Dynamic Syntax Checking : vérifie la syntaxe en arrière-plan pour alimenter Source Browser.

Quand l’utilisateur déclenche Goto Definition, µVision consulte l’index, valide le contexte syntaxique, puis retourne la position du symbole. Si la chaîne transmise dans Misc Controls se termine par un ou plusieurs caractères blancs (espace, tabulation), le parseur d’options d’Arm Compiler 6 détecte une option mal terminée. Pour éviter un plantage, l’IDE désactive alors la complétion de texte et affiche l’erreur.

Comment reproduire le problème

  1. Ouvrir un projet MDK 5.27 avec Arm Compiler 6.
  2. Aller dans ProjectOptions for TargetC/C++ (AC6).
  3. Placer dans Misc Controls une option terminée par un espace, par exemple -fno-rtti ou -O3 .
  4. Reconstruire l’index, puis tenter Goto Definition sur un identifiant.

Étapes de correction

  1. Ouvrir Options for Target (raccourci Alt+F7).
  2. Sélectionner l’onglet C/C++ (AC6).
  3. Activer le champ Misc Controls et se positionner à la fin de la ligne avec Fin.
  4. Supprimer tous les caractères invisibles après le dernier caractère visible (Backspace jusqu’à ce que le curseur coïncide avec la fin du texte).
  5. Optionnel : sélectionner tout le contenu (Ctrl+A) et le retaper manuellement.
  6. Cliquer sur OK.
  7. Fermer complètement µVision, puis le relancer.
  8. Reconstruire la base de l’index : ProjectManageRebuild Browser Database.

Vérification

Après redémarrage, tester :

  • Un Goto Definition sur une fonction et une variable.
  • Un Find All References.
  • La complétion de code dans l’éditeur.

Si l’erreur persiste, nettoyer manuellement les fichiers d’index :

Get-ChildItem -Recurse -Filter *.browse | Remove-Item

Puis relancer une reconstruction complète du projet.

Diagnostic avancé avec fromelf

Pour vérifier que le symbole recherché est bien présent dans l’image finale :

fromelf --text -c -d build\mon_image.axf > analyse_symboles.txt

Rechercher ensuite le nom du symbole dans analyse_symboles.txt.

Prévention : nettoyage automatique du projet

Une approche consiste à supprimer automatiquement les espaces terminaux du fichier projet avant chaque commit.

from pathlib import Path
import re

uv = Path("mon_application.uvprojx")
texte = uv.read_text(encoding="utf-8")
texte = re.sub(r"[ \t]+(\r?$)", r"\1", texte, flags=re.MULTILINE)
uv.write_text(texte, encoding="utf-8")

Validation en intégration continue

Une cible Makefile peut vérifier l’absence d’espaces terminaux :

check-config:
	python - <<'PY'
	import pathlib, re, sys
	for f in pathlib.Path(".").glob("*.uvprojx"):
	    for no, ligne in enumerate(f.read_text(encoding="utf-8").splitlines(), 1):
	        if re.search(r"\s$", ligne):
	            print(f"{f}:{no}: espace final detecte", file=sys.stderr)
	            sys.exit(1)
	PY

Bonnes pratiques

  • Conserver le fichier .uvprojx sous contrôle de version et examiner son diff avant validation.
  • Configurer l’éditeur pour supprimer les espaces en fin de ligne (trim_trailing_whitespace = true dans un fichier .editorconfig).
  • Éviter de copier-coller les options du compilateur depuis un client de messsagerie ou un document riche.
  • Créer un modèle de projet standardisé et vérifié pour toute l’équipe.

Paramétrage du diagnostic du compilateur

Lors de la recherche de la cause première, on peut temporairement simplifier les options :

--diag_suppress=all

Puis les réactiver une par une pour isoler l’option problématique. Après chaque modification, forcer la reconstruction de la base Source Browser.

Étiquettes: Keil MDK Arm Compiler 6 µVision Source Browser Goto Definition

Publié le 2 juillet à 21h57