Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Integrirovannaya_sreda_programmirovania_Borland...doc
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
2.21 Mб
Скачать

7.3. Сообщения об ошибках на этапе выполнения программы Ошибки этапа выполнения программы

Если во время выполнения программы возникает ошибка, система выдает соответствующее сообщение на экран и выполнение программы прекращается. Связь с оператором, вызвавшим ошибку, не устанавливается. Поиск места программы, вызвавшего ошибку, можно произвести трассировкой программы, что затрудняет ее отладку.

Сообщения об ошибках хранятся в файлах errno.h и math.h. Сообщения об ошибках, вызванных при обращении к библиотечным функциям, расположены в файле errno.h. Сообщения об ошибках, связанных с математическими вычис­лениями вещественных значений, находятся в файле matherr.c.

Если ошибка возникла при обращении к библиотечным функциям, в пере­менную errno заносится значение кода (номера) ошибки. Не все библиотечные функции устанавливают переменную errno, а только некоторые. Каждому но­меру (errno) соответствует текст сообщения об ошибке в массиве sys_errlist файла errno.h. С помощью функции perror можно вывести эти сообщения из файла errno.h, связанные со значением errno.

Пример программы, с помощью которой можно вывести значения errno и соответствующие им сообщения, дан ниже в листинге. В программе сообщения выводятся с помощью функции fprintf в файл frz и с помощью функции per­ror в файл stderr. '

Листинг. Вывод сообщений об ошибках при обращении к функциям.

#include <stdlib.h>

#include <errno.h>

#include <stdio.h>

void main(void)

{ // Вывод ошибок из файла errno.h:

FILE *frz;

frz = fopen ("err_fun.rez", "w");

for (errno = 0; errno < 23; errno++)

fprintf(frz,"%d %s\n",

errno, sys_errlist[errno]), perror ("");

close (frz);

}

Для получения сообщений об ошибках можно после вызова функции прове­рить значение errno, и если оно отлично от нуля, то отпечатать соответствую­щее сообщение. Например;

if(errno) printf ("\n%d %s\n", errno,

sys_errlist[errno]);

Пример сообщения после попытки извлечения корня квадратного из вещест­венного отрицательного значения:

sqrt: DOMAIN error

– при обращении к функции sqrt аргумент находится вне допустимых пределов.

Форма сообщения об ошибках, связанных с математическими вычислениями вещественных значений:

Floating point error: текст-сообщения

Пример сообщения после попытки деления на нуль вещественного значения:

Floating point error: Divide by zero

Сообщения, вызванные при работе с библиотеками, файлами и функциями

Сообщения об ошибках

Сообщения из массива sys_errlist файла errno.h:

Argument list too big

Список аргументов слишком длинный: превышает 128 байт

Attempted to remove current directory

Попытка пересылки текущей директории

Bad file number

Ошибочный номер дескриптора (handle)

Cross-device links

Перекрестная связь устройств. Ошибка возникает при попытке передать файл с одного устройства на другое, используя функцию rename

Exec format error

Ошибка формата ехес. Попытка выпол­нить невыполняемую программу

Invalid access code

Ошибочный код доступа

Invalid argument

Неверен один из аргументов функции

Invalid data

Неверные данные

Invalid environrnen

Ошибочна среда

Invalid format

Ошибочен формат

Invalid function number

Ошибочный номер (имя) функции

Invalid memory block adaress

Ошибочен адрес блока памяти

Memory arena trashed

Область памяти засорена

No mere files

Больше нет файлов

Not same device

Нет такого устройства

No such device

Не найдено устройство

No such file or directory

Нет такого файла или директории. Ука­занный файл не существует или компо­нент существующей директории не ука­зан в пути

Path not found

Путь не найден

permission denied

Доступ невозможен: режим доступа к файлу не позволяет это

Too many open files

Слишком много открыто файлов. Нет более доступных дескрипторов (handle), так как слишком много открытых файлов

Сообщения из системы Help об ошибках при работе с библиотеками, файла­ми и модулями:

Bad header in input LIB

Ошибочен заголовок входной библиотеки

Could not allocate memory for per module data

Невозможно размещение в ОП данных модуля

Could not create list file 'filename'

Невозможно создание списка файла

filename

Could not write output

Невозможен вывод в output

DOS reported error; Permission denied opening 'filename'

Ошибка сообщенная DOS; Разрешения нет на открытие filename

DOS reported error: Permission denied opening 'filename' for output

Ошибка сообщенная DOS: Разрешения нет на открытие filename для вывода

DOS reported error; Permission denied-renaming 'filename' to 'filename'

Ошибка сообщенная DOS: Разрешения нет на переименование filename в filename

Error changing file buffer size

Ошибка в изменении размера буфера файла

Error opening 'filename'

Ошибка открытия filename

Error opening 'filename' for output

Ошибка открытия filename для вывода

Error renaming 'filename' to 'filename'

Ошибка переименования filename в filename

'filename' file not found

filename файл не найден

Library too large, please restart with /P 'size'

Библиотека слишком велика, пожалуйста, стартуйте снова с /P size

Liorary coo large, restart with library page size 'size'

Библиотека слишком велика, нужен рестарт с указанием size - размера страницы

Not enough, memory for command-line ouffer

Недостаточно памяти для буфера ко­мандной строки

Object module 'filename' is invalid

Ошибочен объектный модуль filename

Out of memory

Выход за пределы памяти. Надо разбить исходный файл на ряд более простых и коротких файлов и откомпилировать их по отдельности

Out of memory creating extended dictionary

Выход за пределы памяти при создании расширенного словаря

Out of space allocating per module debug struct

Выход за пределы пространства при раз­мещении в модуле структуры отладки

Output device is full

Выводное устройство заполнено

'patr,' - path is too long

path - слишком длинно

Record length 'len' exceeds available butter in module 'module'

Длина записи len превышает доступный буфер в модуле module

The combinations '+*' or '*+' are not allowed

Сочетание +* или *+ недопустимо

Unexpected char 'X' in command line

Недопустимый символ Х в командной строке

User break, library aborted

Прерывание пользователем. Библиотека закрыта

Предупреждения

Added file 'filename' does not begin correctly, ignored

У добавляемого файла filename некор­ректно начало, проигнорировано

'filename' couldn't be created, original won't be cnanged

filename не был создан, оригинал не бу­дет изменен

'filename' file not found

Файл filename не найден

Ignored 'module', path is too long

Проигнорирован module, путь слишком

длинный

Invalid page size value ignored

Неверно значение размера страницы, проигнорировано

Memory full listing truncated!

Память заполнена, вывод усечен!

'module' already in LIB, not changed!

module уже в библиотеке, не изменен!

Module not found in library

Модуль не найден в библиотеке

'reason' - extended dictionary not created

Заключение — расширенный словарь не создан

Sesulcs are safe in file 'filename'

Результаты надежно в файле filename

Unknown command line switch 'X' ignored

Неизвестный переключатель Х в командной строке проигнорирован

Use /e with TLINK to obtain debug information from library

Используйте /е с компоновщиком для получения отладочной информации из библиотеки

Сообщения об ошибках, связанных с математическими вычислениями, и ошибках этапа выполнения программы

Эти сообщения расположены в файле math.h:

Argument domain error

Аргумент функции вне допустимого диа­пазона

Argument singularity

Вырожденный, недопустимый аргумент

Overflow range error

Ошибка переполнения диапазона

Underflow range error

Ошибка потери значимости с выходом из допустимого диапазона

Total loss of significance

Полная потеря существенного значения

partial loss of significance

Частичная потеря существенного значения

Floating point unit stack overflow

Переполнение стека модуля при работе с плавающей точкой

Сообщения этапа выполнения программы — из раздела Run-time Errors, вы­званного по команде Help\Contents\Error Messages:

Abnormal program termination

Ненормальное завершение программы

Divide error

Попытка деления на нуль при работе с данными целого типа

Floating point error: Divide by zero

Ошибка при работе с плавающей точкой: попытка деления на нуль

Floating point error: Domain

Ошибка при работе с плавающей точкой: недопустимое значение аргумента

Floating point error: Overflow

Ошибка при работе с плавающей точкой: Переполнение

Floating precision point error: Partial loss of

Ошибка при работе с плавающей точкой: Частичная потеря значимости

Floating point error; Underflow

Ошибка при работе с плавающей точкой: Потеря значимости

Floating point error: Stack fault

Ошибка при работе с плавающей точкой: Стек ошибочен

Null pointer assignment

Попытка записать значение по неинициа­лизированному указателю

Stack overflow

Стек переполнен

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]