Erreurs d'exceptions

De RAD Studio
Aller à : navigation, rechercher

Remonter à Erreurs CodeGuard - Index

Lorsqu'une exception système survient, CodeGuard signale l'erreur d'exécution à l'aide d'informations données par le système d'exploitation. Si possible, le journal CodeGuard indique l'endroit où votre application a provoqué l'exception. CodeGuard n'intercepte pas l'exception, ne la redirige pas et n'interfère en aucune manière avec le comportement normal du programme.

Les exceptions suivantes illustrent la façon dont CodeGuard signale les exceptions :

  • Erreur de protection générale
  • Division par zéro

Erreur de protection générale

Dans l'exemple suivant, CodeGuard fournit des informations sur une erreur de protection générale (exception système Intel 0xD). En plus de l'emplacement du code source qui a provoqué l'exception, le journal indique où la mémoire a été allouée puis libérée. La valeur fausse signalée résulte de l'accès à un pattern d'octets que CodeGuard utilise pour identifier des emplacements mémoire invalides.

Error 00003. 0x400003 (Thread 0x0090):
Exception 0xC0000005: Access violation at 0x80828082.
| gpfault.c line 32:
|    {
|       q = p[3];
|>      *q = 1;
|    }
| }
Call Tree:
   0x004010E5(=GPFAULT.EXE:0x01:0000E5) gpfault.c#32
   0x00406B29(=GPFAULT.EXE:0x01:005B29)

The bogus value (0x80828082) was most likely retrieved by accessing a(n)
 memory block that has already been freed
The memory block (0x008322A4) [size: 16 bytes] was allocated with malloc
| gpfault.c line 17:
|     int *q;
|
|>   p = malloc(sizeof(*p) * 4);
|
|    /*  Initialise p */
Call Tree:
   0x00401094(=GPFAULT.EXE:0x01:000094) gpfault.c#17
   0x00406B29(=GPFAULT.EXE:0x01:005B29)

The memory block (0x008322A4) was freed with free
| gpfault.c line 17:
|     int *q;
|
|>   p = malloc(sizeof(*p) * 4);
|
|    /*  Initialise p */
Call Tree:
   0x00401094(=GPFAULT.EXE:0x01:000094) gpfault.c#17
   0x00406B29(=GPFAULT.EXE:0x01:005B29)

Division par zéro

Dans l'exemple suivant, CodeGuard identifie l'endroit exact dans le code source où la division par zéro s'est produite (exception système Intel 0x0).

Error 00001. 0x400000 (Thread 0x008B):
Exception 0xC0000094:
| ZERODIV.C line 9:
| {
|  x = 1;
|> return x / y;
| }
|
Call Tree:
   0x0040109C(=ZERODIV.EXE:0x01:00009C) ZERODIV.C#9
   0x00406321(=ZERODIV.EXE:0x01:005321)

Voir aussi