Section courante

A propos

Section administrative du site

 Langage  Elément  Tutoriel  Emulateur  Annexe  Aide 
ABAP/4
Ada
Assembleur
Assembly & bytecode
ASP (Active Server Pages)
Basic
C
C++
C# (C Sharp)
Cobol
ColdFusion
Fortran
HTML
Java
JavaScript
LISP
Logo
LotusScript
Oberon
Pascal
Perl
PHP
PL/1
Prolog
Python
Rebol
REXX
Ruby
Rust
SAS
NoSQL
SQL
Swift
X++ (Axapta)
GNAT
SMALLAda
VHDL
Assembleur 370
Assembleur 1802
Assembleur 4004
Assembleur 6502
Assembleur 6800
Assembleur 68000
Assembleur 8080 et 8085
Assembleur 8089
Assembleur 80x86
Assembleur AGC4
Assembleur ARM
Assembleur DPS 8000
Assembleur i860
Assembleur Itanium
Assembleur MIPS
Assembleur PDP-11
Assembleur PowerPC
Assembleur RISC-V
Assembleur SPARC
Assembleur SuperH
Assembleur UNIVAC I
Assembleur VAX
Assembleur Z80
Assembleur Z8000
Assembleur z/Architecture
ASSEMBLER/MONITOR 64
Micol Assembler
GFA Assembler
A86
MASM (Macro Assembler)
TASM (Turbo Assembler)
CIL
Jasmin
LLVM
MSIL
Parrot
P-Code (PCode)
SWEET16
G-Pascal
ASP 1.0
ASP 2.0
ASP 3.0
ASP.NET
ASP.NET Core
ABasiC (Amiga)
Adam SmartBASIC
Altair BASIC
AmigaBASIC (Amiga)
AMOS Basic (Amiga)
Atari Basic (Atari 400, 600 XL, 800, 800XL)
Basic Apple II (Integer BASIC/APPLESOFT)
Basic Commodore 64 (CBM-BASIC)
Basic Commodore 128 (BASIC 7.0)
Basic Commodore VIC-20 (CBM-BASIC 2.0)
Basic Coco 1 (Color Basic)
Basic Coco 2 (Extended Color Basic)
Basic Coco 3 (Extended Color Basic 2.0)
BASICA (PC DOS)
Basic Pro
BBC BASIC
Blitz BASIC (Amiga)
DarkBASIC
Dartmouth BASIC
GFA-Basic (Atari ST/Amiga)
GWBASIC (MS-DOS)
Liberty BASIC
Locomotive BASIC (Amstrad CPC)
MSX-Basic
Omikron Basic (Atari ST)
Oric Extended Basic
Power Basic
Quick Basic/QBasic (MS-DOS)
Sinclair BASIC (ZX80, ZX81, ZX Spectrum)
ST BASIC (Atari ST)
Turbo Basic
Vintage BASIC
VBScript
Visual Basic (VB)
Visual Basic .NET (VB .NET)
Visual Basic pour DOS
Yabasic
BeckerBASIC
SIMONS' BASIC
Basic09 d'OS-9
Disk Extended Color Basic
Basic09 d'OS-9
Disk Extended Color Basic
Access
Excel
Visual Basic pour Windows
Visual Basic .NET pour Windows
C Shell Unix (csh)
C pour Amiga
C pour Atari ST
C pour DOS
C pour Falcon030
C pour GEMDOS (Atari ST)
C pour Linux
C pour PowerTV OS
C pour OS/2
C pour Unix
C pour Windows
Aztec C
CoCo-C
GNU C
HiSoft C
IBM C/2
Introl-C
Lattice C
Microsoft C
MinGW C
MSX-C
Open Watcom C
OS-9 C Compiler
Pure C
Quick C
Turbo C
HiSoft C for Atari ST
HiSoft C for CP/M (Amstrad CPC)
C++ pour OS/2
C++ pour Windows
Borland C++
C++Builder
IBM VisualAge C++
Intel C++
MinGW C++
Open Watcom C++
Symantec C++
Turbo C++
Visual C++
Visual C++ .NET
Watcom C++
Zortech C++
C# (C Sharp) pour Windows
Apple III Cobol
Microsoft Cobol
BlueDragon
Lucee
OpenBD
Railo
Smith Project
Microsoft Fortran
WATFOR-77
CSS
FBML
Open Graph
SVG
XML
XSL/XSLT
LESS
SASS
GCJ (GNU)
JSP
Jython
Visual J++
Node.js
TypeScript
AutoLISP
ACSLogo
LotusScript pour Windows
Amiga Oberon
Oberon .NET
Apple Pascal
Delphi/Kylix/Lazarus
Free Pascal
GNU Pascal
HighSpeed Pascal
IBM Personal Computer Pascal
Lisa Pascal
Maxon Pascal
MPW Pascal
OS-9 Pascal
OSS Personal Pascal
Pascal-86
Pascal du Cray Research
Pascal/VS
Pascal-XT
PURE Pascal
QuickPascal
RemObjets Chrome
Sun Pascal
THINK Pascal
Tiny Pascal (TRS-80)
Turbo Pascal
UCSD Pascal
VAX Pascal
Virtual Pascal
Turbo Pascal for CP/M-80
Turbo Pascal for DOS
Turbo Pascal for Macintosh
Turbo Pascal for Windows
CodeIgniter (Cadre d'application)
Drupal (Projet)
Joomla! (Projet)
Phalanger (PHP .NET)
phpBB (Projet)
Smarty (balise)
Twig (balise)
Symfony (Cadre d'application)
WordPress (Projet)
Zend (Cadre d'application)
PL360
PL/M-80
PL/M-86
Turbo Prolog
CPython
IronPython
Jython
PyPy
AREXX
Regina REXX
JMP
Btrieve
Cassandra
Clipper
CouchDB
dBASE
Hbase
Hypertable
MongoDB
Redis
Access
BigQuery
DB2
H2
Interbase
MySQL
Oracle
PostgreSQL
SAP HANA
SQL Server
Sybase
U-SQL
Référence des mots réservés (mots clefs)
Référence des procédures et des fonctions
Un aperçu du système OS-9 Pascal
L'interpréteur P-Code
L'éditeur de liaison OS-9 Pascal
Fonctions et procédures d'entrée/sortie OS-9 Pascal
Gestion des erreurs d'exécution
Écriture des procédures de langage assembleur
Conformité aux normes ISO
VCC
Références des codes d'erreur du OS-9 Pascal
Préface
Notes légal
Dictionnaire
Recherche

Gestion des erreurs d'exécution

Si, pendant l'exécution du programme, une erreur se produit et entraîne l'arrêt de votre programme, le type de message d'erreur suivant est écrit dans le chemin de l'erreur système :

PASCAL ERROR #w
(texte du message d'erreur)
PROCEDURE #x0
PROCEDURE #x1
PROCEDURE #xn
LINE NUMBER=y
PCODE LOCATION=z

où :

Paramètre Description
w Est le numéro d'erreur s'étant produit. Les numéros d'erreur inférieurs à 100 se réfèrent généralement à des erreurs d'entrée/sortie, tandis que d'autres chiffres font généralement référence à des erreurs de processus.
texte du message d'erreur Est le texte du message extrait du fichier PASCALERRS. Si le fichier PASCALERRS ne peut pas être ouvert ou si le texte approprié est introuvable, cette ligne sera omise. Si l'erreur est une erreur d'entrée/sortie, une deuxième ligne sera généralement affichée donnant un message d'erreur OS-9 relatif à l'erreur d'entrée/sortie.
x0, x1 ..., xn Est une dissociation de l'imbrication des appels de procédure. Il indique que le numéro de procédure "x0" était en cours d'exécution lorsque l'erreur s'est produite, et le "x0" a été appelé par "x1" et ainsi de suite jusqu'à ce que "xn" soit trouvé, étant le premier numéro de procédure ayant commencé l'exécution. Les nombres «x» font référence aux numéros de procédure comme indiqué dans la liste du tableau des procédures. Le numéro de procédure "xn" doit toujours être zéro si la pile n'a pas été détruite. Le même numéro de procédure peut apparaître plusieurs fois dans la liste en cas de récursivité. Si une procédure de code natif fait partie de l'imbrication des appels, elle apparaîtra sous le numéro de procédure 255, quelle que soit la procédure de code natif. Les procédures de code natif perdent leur identité numérique dans le cadre de l'exigence d'être une procédure de code natif. Si l'exécution n'a pas été suffisamment avancée pour qu'une pile d'appels soit construite, ou si la pile d'appels n'est pas valide, soit aucune dissociation ne sera affichée, soit la dissociation peut afficher des numéros de procédure sans signification.
y Est le numéro de ligne du programme source où l'erreur s'est produite. Si le numéro de la ligne source commence par le mot-clef "END" ou "ELSE", il est possible que l'erreur se soit réellement produite dans le code de la ligne source significative précédente suivante, ou que l'erreur se soit réellement produite dans le code de terminaison quel que soit le type de instruction composée que le "END" ou "ELSE" se termine. Cette ligne d'erreur n'est donnée que si vous avez activé l'inclusion des numéros de ligne source dans le programme source. Comme pour les lignes d'erreur précédentes, cette ligne n'est signalée que si l'exécution s'est déroulée suffisamment loin pour qu'un numéro de ligne valide soit connu. De plus, si l'inclusion du numéro de ligne est activée et désactivée de manière sélective dans le programme source, cette ligne d'erreur affiche le dernier numéro de ligne source connu.
z Est l'emplacement du P-Code dans la procédure "x0" étant en cours d'exécution lorsque l'erreur s'est produite. Là où le message de numéro de ligne peut vous amener rapidement à proximité de l'énoncé du problème, l'emplacement du P-Code peut vous donner une idée de l'endroit où le problème s'est produit dans une instruction. Comme pour les lignes d'erreur précédentes, cette ligne n'est signalée que si l'exécution s'est déroulée suffisamment loin pour qu'un emplacement P-Code valide soit connu. De plus, il y a plusieurs erreurs pouvant se produire pour lesquelles les informations de localisation du P-Code sont perdues, auquel cas cette ligne n'apparaîtra pas. Plus particulièrement, de nombreuses erreurs d'entrée/sortie et l'erreur de débordement de multiplication d'adresse font que les informations d'emplacement du P-Code sont inconnues au moment du rapport d'erreur. Les programmes en étant à leurs premiers stades de test devraient probablement faire en sorte que les numéros de ligne soient inclus dans le fichier P-Code pour faciliter le débogage et les tests. Au fur et à mesure que le programme devient plus fiable et sans erreur, vous pouvez empêcher l'inclusion de numéro de ligne pour obtenir une exécution légèrement améliorée et une efficacité de la mémoire - en vous appuyant uniquement sur le rapport d'emplacement du P-Code à des fins de débogage supplémentaires.

La plupart des erreurs d'abandon sont divisées en deux classes : entrées/sorties et mathématiques. Si une erreur d'abandon est dans l'une de ces deux classes, son alimentation peut être désactivée via les procédures standard IOABORT ou MATHABORT. Les fonctions standard IORESULT et MATHRESULT sont fournies afin que vous puissiez traiter de telles erreurs dans le programme. Certains programmeurs pensent que vous ne devriez jamais désactiver les vérifications du système pour les erreurs d'entrées/sorties ou mathématiques. Si vous faites partie de ceux-ci, n'utilisez simplement aucune des procédures standard mentionnées ci-dessus. Si, cependant, vous êtes d'avis que les programmes de production doivent être écrits avec l'idée qu'ils ne doivent jamais être interrompus par le système, quelles que soient les ordures que l'utilisateur envoie au programme, que le programme doit signaler intelligemment la nature de l'entrée erronée, et, si nécessaire, arrêtez gracieusement, alors les fonctions et procédures standard ci-dessus peuvent être d'un grand avantage.

Il existe cependant quelques erreurs interrompant toujours votre programme de manière inconditionnelle. Une erreur de sélection de cas en est une. Cette erreur se produit lorsqu'une instruction case est exécutée mais qu'aucune instruction n'a une liste de sélection constante contenant la valeur de sélection requise. Par exemple :

  1. i:=5;
  2. CASE i OF
  3.  0, 7: DoThisStatement;
  4.  1..4: DoAnotherStatement
  5. END; { CASE }

provoquerait un abandon de l'exécution car la valeur réelle de la variable i, étant 5 dans ce cas, n'apparaît dans aucune liste de sélection de constantes. Une des deux actions peut être entreprise pour éviter ce type d'erreur - soit assurez-vous que toutes les valeurs possibles de l'expression de sélection sont prises en compte dans les listes de sélection de constantes, ou utilisez l'option d'instruction de cas OTHERWISE comme dans :

  1. i:=5;
  2. CASE i OF
  3.  0, 7: DoThisStatement;
  4.  1..4: DoAnotherStatement;
  5.  OTHERWISE: BEGIN
  6.   ReportError (i);
  7.   GOTO EndOfProgram
  8.  END
  9. END; { CASE }

Les erreurs de dépassement de pile et de tas abandonnent également un programme de manière inconditionnelle. L'utilisation des options d'exécution peut éliminer ces erreurs sur les options d'exécution. Les erreurs de débordement multiplié par adresse annulent également inconditionnellement un programme, mais cela, ainsi que toute autre erreur d'abandon inconditionnel, peut être évité par de bonnes pratiques de programmation. Le système OS-9 Pascal est destiné à fournir la capacité d'écrire des programmes étant aussi conviviaux et tolérants que possible et les erreurs restantes interrompant toujours sans condition un programme le font parce qu'il n'est pas possible de récupérer intelligemment de la condition d'erreur et poursuivre l'exécution du programme.

Lorsque vous utilisez IOABORT et MATHABORT, il est préférable de désactiver le processus d'abandon pour le plus petit intervalle de code nécessaire. Par exemple :

  1. ioabort (f, false);
  2. reset (f, 'INPUTFILE');
  3. ioabort (f, true);
  4. i:=ioresult (f);

est un bon moyen de vérifier si un fichier existe déjà. Si le fichier n'existe pas, la variable i contiendra le numéro 216 étant le numéro d'erreur OS-9 pour une tentative d'ouverture d'un fichier inexistant. Si aucune erreur n'a été rencontrée lors de la tentative d'ouverture du fichier, la variable «i» contiendra le numéro 0. N'oubliez pas que si plusieurs erreurs sont rencontrées pour un fichier entre l'appel IOABORT désactivant le processus d'abandon et l'appel IOABORT réactivant le processus d'abandon, seul le premier numéro d'erreur est renvoyé - les autres sont perdus. Le contraire est vrai pour les erreurs mathématiques - seul le dernier numéro d'erreur est conservé, les autres sont perdus. Par exemple :

  1. mathabort(false);
  2. i:=32767+16000*16000+2;
  3. mathabort(true);
  4. j: =mathresult;

définira la variable «j» sur le numéro 199, indiquant un débordement d'entier lors de l'ajout, de la soustraction ou de l'annulation. L'erreur provoquée par le débordement d'entier pour la multiplication est perdue puisque l'opération d'ajout ayant également provoqué un débordement s'est produite en dernier. Si, dans l'exemple ci-dessus, le débordement de multiplication a provoqué le résultat du module étant retenu comme étant un nombre négatif, il est probable qu'aucun débordement sur l'addition, la soustraction ou la négation ne se serait produit. Dans ce cas, la variable "j" serait définie sur le nombre 184, indiquant un dépassement de capacité de multiplication. Gardez à l'esprit la combinaison possible d'événements pouvant se produire et les résultats possibles pour toutes ces combinaisons lors de l'utilisation de IORESULT et MATHRESULT. Souvenez-vous également que chaque fois que vous appelez IORESULT ou MATHRESULT, le numéro d'erreur du fichier approprié ou du résultat mathématique est remis à zéro. Vous devez enregistrer une copie du numéro d'erreur du dernier appel si vous avez l'intention de l'utiliser plusieurs fois.



PARTAGER CETTE PAGE SUR
Dernière mise à jour : Samedi, le 11 juillet 2020