E2171 La variable '%s' est inaccessible ici du fait de l'optimisation (Delphi)

De RAD Studio
Aller à : navigation, rechercher

Remonter à Messages d'erreur et d'avertissement (Delphi)

L'évaluateur ou l'instruction watch essaie de récupérer la valeur de <nom>, mais le compilateur a déterminé que la durée réelle des variables se terminait avant ce point d'inspection. Cette erreur se produit souvent si le compilateur détermine qu'une valeur (non utilisée au-delà d'un point spécifique du flux de contrôle du programme) est affectée à une variable locale.


Créez une nouvelle application.
Mettez un bouton sur la fiche.
Double-cliquez sur le bouton pour qu'il soit pris en méthode 'click'.
Ajoutez une variable globale, 'c', de type Integer à la section implémentation.

La méthode click doit être lue comme suit :

  procedure TForm1.Button1Click(Sender: TObject);
    var a, b : integer;
  begin
    a := 10;
    b := 20;
    c := b;
    a := c;
  end;

Définissez un point d'arrêt sur l'assignation de 'c'.
Compilation et exécution de l'application.
Appuyez sur le bouton.
Après que le point d'arrêt a été atteint, ouvrez l'évaluateur (Exécuter|Evaluer/Modifier).
Evaluez 'a'.

Le compilateur réalise que la première affectation à 'a' est finie, puisque la valeur n'est jamais utilisée. Ainsi, il reporte l'utilisation de 'a' jusqu'à la seconde affectation -- jusqu'au point où 'c' est affecté à 'a', la variable 'a' est considérée comme morte et ne peut être utilisée par l'évaluateur.

La seule solution est d'essayer de voir uniquement les variables dont on sait qu'elles ont des valeurs vivantes.