Debugging Scripts

 

Le système de script d’Altium Designer offre un environnement de débogage complet. Le débogueur de scripts vous aide à identifier et à résoudre les erreurs dans les scripts en fournissant une gamme d’outils automatisés et de panneaux d’information.

Erreurs de script

Les erreurs courantes incluent des méthodes non valides, des opérateurs de regroupement mal placés, des types incompatibles, des erreurs de logique et des erreurs typographiques. Lorsque le système de script rencontre une erreur, le débogueur met le script en pause et affiche une boîte de dialogue d’erreur indiquant le problème.

L’exemple ci-dessous montre un script avec un caractère de fin manquant ainsi que le message de la boîte de dialogue d’erreur correspondant.

 Le débogueur met un script en pause en réponse à des erreurs de compilation ou d’exécution.

Une fois la boîte de dialogue d’erreur fermée, le code peut être corrigé puis le script relancé. Si le script doit être arrêté – par exemple lors d’une exécution pas à pas – utilisez la commande Stop (Run » Stop, Ctrl+F3) ou le bouton ( dans la barre d’outils Script Debug).

Dans certaines situations, une erreur peut entraîner le verrouillage d’un script dans une boucle infinie et le script ne répond plus. Pour résoudre ce problème, appuyez sur les Ctrl+Pause/Break touches de raccourci pour interrompre la boucle du script.

Débogage de script

Le système de script propose toute une gamme d’outils pour aider au débogage des scripts. Cela inclut l’application de plusieurs points d’arrêt dans un script, l’utilisation du panneau Watch List pour surveiller la valeur des variables, l’utilisation des signets pour naviguer plus efficacement, ainsi que les fonctions de pas à pas détaillé et de pas à pas principal pour suivre l’exécution des scripts.

Par exemple, les fonctionnalités suivantes peuvent être utilisées lors de la vérification des valeurs des variables et des expressions dans un script :

► Voir Outils de l’éditeur de script pour plus d’informations sur l’utilisation des outils de l’éditeur lors du débogage des scripts.

Si vous déboguez un script qui agit sur un document ouvert – par exemple lors de l’utilisation de l’interface IPCB_Board pour obtenir des données à partir d’un document PCB – l’éditeur de script ne pourra pas le détecter comme document actif. Dans ce cas, enregistrez toutes les modifications effectuées, puis exécutez le script depuis le document actif lui-même (File » Run Script).

Traçage

Pour aider à trouver et à résoudre une erreur inconnue dans un script, une série de points d’arrêt peut être insérée dans un script afin de mettre le code en pause à plusieurs endroits pendant que les valeurs des variables et des expressions sont vérifiées.

Cependant, à tout moment où le script est en pause, il peut aussi être avancé d’une ligne fonctionnelle à la fois à l’aide des fonctions de traçage/pas du débogueur. De cette manière, un point d’arrêt peut être utilisé pour mettre initialement le script en pause dans la zone d’intérêt, puis l’avancer ligne par ligne à l’aide de la fonction de traçage. Le processus consistant à exécuter un script une ligne à la fois est appelé traçage ou exécution pas à pas du script.

Le débogueur de scripts fournit des commandes liées au traçage – pas à pas détaillé (Run » Step Into) et pas à pas principal (Run » Step Over). Cela vous permet de suivre le processus du script et d’analyser son comportement lors du débogage du code du script.

Les commandes de débogage disponibles dans le menu Run .
Les commandes de débogage disponibles dans le menu Run .

Commande Step Into

Le processus Step Into exécute le script une instruction à la fois. La commande est disponible dans le menu Run , via son bouton associé dans la barre d’outils Script Debug (), ou par la touche de raccourci F7 .

Si l’instruction en cours d’exécution appelle une autre procédure, le pas à pas détaillé transfère le contrôle à la première ligne de la procédure appelée. La surbrillance vert pois dans l’éditeur indique la ligne de code à laquelle le script est rendu. Le processus d’exécution pas à pas du script est annulé avec la commande Run » Stop, le raccourci Ctrl+F3 ou le bouton de la barre d’outils ().

Commande Step Over

Le processus Step Over est similaire à Step Into, sauf que si l’instruction en cours est un appel à une autre procédure, toute la procédure appelée est exécutée sans arrêt, au lieu d’être suivie pas à pas. La commande est disponible dans le menu Run , via son bouton associé (), ou par la touche de raccourci F8 .

Cette commande est utile lorsqu’il a été déterminé qu’une procédure called n’est pas la cause du problème dans la procédure en cours, et évite d’avoir à suivre inutilement la procédure appelée ligne par ligne – cette procédure est alors « ignorée lors du pas à pas ».

Utilisez la commande Run » Run To Cursor depuis les menus principaux (raccourci : Ctrl+F9) pour exécuter un script jusqu’à l’emplacement du curseur. Le script se met en pause sur cette ligne comme s’il avait rencontré un point d’arrêt, à partir duquel il peut être exécuté ou repris en pas à pas.

Panneau Call Stack

Le panneau Call Stack est utilisé pour afficher la chaîne de procédures et de fonctions qui ont conduit au point d’exécution actuel dans le script en cours de débogage.

Le panneau Call Stack 
Le panneau Call Stack 

Au fur et à mesure du débogage pas à pas de votre script, le panneau affiche le nom de toute fonction ou procédure dans laquelle vous entrez.

Lorsqu’un appel à une autre fonction ou procédure est rencontré, le panneau affiche le nom de cette fonction/procédure supplémentaire au moment où elle est entrée. Comme la fonction/procédure est appelée depuis une autre fonction/procédure, la fonction/procédure d’origine reste affichée dans le panneau.

Une « pile d’appels » est ainsi effectivement constituée, montrant la relation entre les appels descendants de fonctions/procédures. La fonction/procédure d’origine apparaît en bas de la pile, chaque fonction/procédure appelée ensuite apparaissant au-dessus, jusqu’à la fonction/procédure actuellement active en haut de la pile.

Lorsque l’exécution du script sort d’une sous-fonction/procédure et revient dans la fonction/procédure appelante, la première est retirée de la pile et la fonction/procédure appelante devient le sommet de la pile.

Un double-clic sur une entrée du panneau permet d’accéder à la ligne de script correspondante dans laquelle l’appel à la fonction ou procédure sélectionnée est effectué. La ligne sera mise en surbrillance avec la couleur associée aux erreurs de script et le marqueur d’erreur de script sera affiché dans la marge de droite. Cela est utilisé uniquement à des fins de mise en évidence. Il disparaît lorsque vous cliquez sur le document et n’interrompt en aucune façon la session de débogage.

Exceptions et messages

Comme c’est souvent le cas dans tous les projets de programmation, le développement et le débogage du code de script ne s’arrêtent pas nécessairement à un script « fonctionnel ». Il est probable qu’en utilisation pratique, un script rencontre des erreurs imprévues ou ne produise pas les résultats attendus.

Heureusement, il existe plusieurs façons d’utiliser le système de script pour gérer les exceptions d’exécution et fournir un retour utilisateur sur le fonctionnement du script.

Gestionnaires d’exceptions

En DelphiScript, le mot-clé try introduit une instruction try-except ou une instruction try-finally. Ces deux instructions sont liées, mais servent des objectifs différents.

Try Finally

Dans un gestionnaire Try-Finally, les instructions du bloc finally sont toujours exécutées – qu’une exception se soit produite ou non dans le bloc try. Utilisez le bloc try-finally pour libérer des objets temporaires ou d’autres ressources, et pour effectuer les opérations de nettoyage.

Reset(F);
Try
  // process file F
Finally
  CloseFile(F);
End;

Try Except

Utilisez l’instruction Try-Except pour intercepter les exceptions levées et exécuter le code de gestion d’erreur associé. Par exemple, une exception spécifique peut être interceptée et un journal mis à jour, ou une boîte de dialogue d’erreur descriptive ouverte. Une exception de code dans le bloc try entraîne l’exécution du bloc except.

Dans l’exemple ci-dessous, la procédure ApplyOffset est appelée, avec des paramètres appropriés, depuis la procédure DefineOffset. La procédure effectue un simple calcul de division (sur les variables Ydim et Zdim ) et affiche le résultat (Offset) dans une boîte de dialogue standard.

Procedure ApplyOffset(Ydim, Zdim);
Var
   Offset;
Begin;
   Try
      Offset := Ydim div Zdim;
      ShowInfo('Calculated Offset = ' + IntToStr(Offset));
   Except
      ShowWarning('Entered Z dimension must be greater than zero.');
   End;
End;

Procedure DefineOffset;
Begin;
   ApplyOffset(32, 4);
End;

Pour les paramètres ApplyOffset indiqués ci-dessus (32,4), le script exécuté affichera le résultat calculé à l’aide de la procédure ShowMessage, comme illustré ci-dessous.

Sinon, le fait de modifier les paramètres transmis à 32,0 (ApplyOffset(32, 0);) provoque une exception de division par zéro dans le calcul Offset, ce qui déclenche le bloc gestionnaire Except. Celui-ci utilise la procédure ShowWarning pour afficher une boîte de dialogue Warning appropriée.

Dans le mode débogage de l’éditeur de script, une exception met l’exécution du script en pause lorsque la boîte de dialogue Error est fermée. Utilisez la commande Run ou Step Into pour continuer.

Raise

Dans la procédure simple de gestion d’erreur ci-dessus, on suppose que l’exception est levée en réponse à une erreur de division par zéro, mais cela signifie que d’autres types d’exceptions ne seront pas signalés avec précision par le texte de la boîte de dialogue d’avertissement. Dans cet exemple toutefois, il s’agit de l’erreur d’exception la plus susceptible d’être rencontrée.

Une certaine forme de détection d’erreur spécifique reste néanmoins souhaitable du point de vue de l’utilisateur. En DelphiScript, le mot-clé Delphi On (pour intercepter un type d’exception spécifié) n’est pas pris en charge, mais l’instruction Raise peut être utilisée dans un bloc Except pour relancer l’exception la plus récente, quel qu’en soit le type.

Try
   Offset := Ydim div Zdim;
   ShowInfo('Calculated Offset = ' + IntToStr(Offset));
Except
   Raise;
End;

De cette manière, lorsque l’essentiel du code d’une procédure se trouve dans le bloc try d’une instruction try-except, toutes les exceptions peuvent être signalées par l’instruction Raise . Notez que la boîte de dialogue d’exception n’affichera que des messages d’erreur génériques, plutôt que des informations spécifiques au script.

   

Raise peut être utilisé sans paramètres pour relancer la dernière exception, ou avec un paramètre de chaîne pour fournir un message d’erreur spécifique.

Raise peut également être utilisé pour provoquer une exception en réponse à des tests spécifiques, par exemple en appliquant de simples instructions if-then ou case.

Procedure ApplyOffset(Ydim, Zdim);
Var
   Offset;
Begin;
   if Zdim > Ydim then
      Begin;
         Raise('Z dimension must be smaller than Y dimension.');
      End;
   Offset := Ydim div Zdim;
   ShowInfo('Calculated Offset = ' + IntToStr(Offset));
End;

Ici, si le paramètre Zdim de l’exemple ci-dessus est supérieur au paramètre Ydim, une exception (avec message) est levée.

Erreurs dans les scripts VB

L’implémentation VBScript dans le moteur de script d’Altium Designer comporte des fonctions intégrées qui peuvent être utilisées dans les projets de script VBScript, telles que la fonction MsgBox .

L’instruction On Error peut être utilisée lors de l’interception des erreurs dans les scripts VB. Consultez la documentation Microsoft VBScript pour plus d’informations sur l’interception des erreurs.

Messages

En général, les messages constituent le principal moyen d’améliorer le fonctionnement d’un script du point de vue de l’utilisateur.

Les messages peuvent fournir des alertes en cas d’exception ou indiquer des informations d’exécution et des avertissements, et peuvent être insérés dans des routines de script traitant des données d’entrée, des calculs, des opérations sur les fichiers ou toute procédure pour laquelle une visibilité sur le déroulement serait utile.

Boîtes de dialogue de message

En plus de la boîte de dialogue de message de base disponible dans le système de script (ShowMessage), une gamme de boîtes de dialogue spécifiques est disponible afin de fournir un retour utilisateur adapté.

Celles-ci incluent des procédures de message telles que :

  • ShowError
  • ShowException
  • ShowInfo
  • ShowWarning
  • et bien d’autres..

Panneau Messages

Le panneau Messages  d’Altium Designer peut être un outil de débogage utile pour les scripts, mais il peut également être utilisé pour fournir à l’utilisateur un flux continu d’informations de message utiles.

Le panneau Messages est un objet Workspace Manager accessible depuis l’interface Message Manager. Le panneau Messages peut être utilisé dans un script pour afficher l’état des variables et des propriétés (ou de toute autre donnée) à des fins de débogage comme de retour utilisateur, comme illustré dans l’exemple ci-dessous.

Procedure CreateMessages;
var
   WS : IWorkSpace;
   MM : IMessagesManager;
Begin
   WS := GetWorkSpace;           // obtain Workspace Manager interface
   MM := WS.DM_MessagesManager;  // obtain Message Manager interface
   
   MM.ClearMessages;             // initialize

   MM.BeginUpdate;
   // add relevant messages here using MM.AddMesssage procedures
   MM.EndUpdate;

   WS.DM_ShowMessageView;         // display messages
End;
AI-LocalizedAI-localized
If you find an issue, select the text/image and pressCtrl + Enterto send us your feedback.
Feature Availability

The features available to you depend on which Altium solution you have – Altium Develop, an edition of Altium Agile (Agile Teams or Agile Enterprise), or Altium Designer (on active term).

If you don’t see a discussed feature in your software, contact Altium Sales to find out more.

Legacy Documentation

Altium Designer documentation is no longer versioned. If you need to access documentation for older versions of Altium Designer, visit the Legacy Documentation section of the Other Installers page.

Contenu