例外エラー

提供: RAD Studio
移動先: 案内検索

CodeGuard のエラー:インデックス への移動

システム例外が発生すると、CodeGuard は、オペレーティング システムから提供される情報を使って実行時エラーを報告します。可能であれば、アプリケーションのどこで例外が発生したかが CodeGuard のログに示されます。CodeGuard は、例外のトラップやリダイレクトなど、プログラムの通常の動作を妨げることはしません。

以下の例外は、CodeGuard による例外報告の例を示します。

  • 一般保護例外
  • ゼロ除算

一般保護例外

以下の例で、CodeGuard は、一般保護例外(Intel システム例外 0xD)に関する情報を提供します。ログには、例外が発生したソース コードの箇所に加えて、メモリがどこで割り当てられ、その後どこで解放されたかも示されています。CodeGuard で無効なメモリ位置を特定するのに使用されるバイト パターンにアクセスした結果が、不正な値として報告されます。

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);
|
|    /*  Initialize 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);
|
|    /*  Initialize p */
Call Tree:
   0x00401094(=GPFAULT.EXE:0x01:000094) gpfault.c#17
   0x00406B29(=GPFAULT.EXE:0x01:005B29)

ゼロ除算

以下の例で、CodeGuard は、ソース コードにおけるゼロ除算(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)

関連項目