Spec-Zone.ru › Tcl/Tk

bgerror

Имя

bgerror — Команда, вызываемая для обработки ошибок в фоновом режиме

Синтаксис

bgerror сообщение

Описание

Релиз 8.5 Tcl поддерживает команду interp bgerror, которая позволяет приложениям регистрировать в интерпретаторе команду, которая будет обрабатывать ошибки в фоновом режиме в этом интерпретаторе. В более старых версиях Tcl такого уровня управления не было, и приложения могли контролировать обработку ошибок в фоновом режиме только путём создания команды с именем bgerror в глобальном пространстве имён интерпретатора. Данная документация описывает требования к интерфейсу команды bgerror, которую приложение может определить, чтобы сохранить совместимость с версиями Tcl до 8.5. Приложения, нацеленные на поддержку только релизов Tcl 8.5 и более поздних, должны просто использовать interp bgerror.

Команда bgerror не является встроенной частью Tcl. Вместо этого отдельные приложения или пользователи могут определить команду bgerror (например, как процедуру Tcl), если они хотят обрабатывать ошибки в фоновом режиме.

Ошибка в фоновом режиме — это ошибка, которая возникает в обработчике событий или другой команде, не исходящей от приложения. Например, если ошибка возникает при выполнении команды, указанной командой after, то это ошибка в фоновом режиме. Для ошибки, не являющейся ошибкой в фоновом режиме, ошибка просто возвращается вверх через вложенные вычисления команд Tcl до достижения кода верхнего уровня в приложении; затем приложение может сообщить об ошибке любым желаемым способом. При возникновении ошибки в фоновом режиме завершение происходит в библиотеке Tcl, и нет очевидного способа для Tcl сообщить об ошибке.

Когда Tcl обнаруживает ошибку в фоновом режиме, она сохраняет информацию об ошибке и вызывает команду-обработчик, зарегистрированную командой interp bgerror позже, как обработчик событий в режиме ожидания. По умолчанию команда-обработчик вызывает команду bgerror. Перед вызовом bgerror Tcl восстанавливает переменные errorInfo и errorCode до их значений в момент возникновения ошибки, а затем вызывает bgerror с сообщением об ошибке в качестве единственного аргумента. Tcl предполагает, что приложение реализовало команду bgerror и что команда сообщит об ошибке способом, понятным для приложения. Tcl проигнорирует любой результат, возвращённый командой bgerror, до тех пор, пока не будет сгенерирована ошибка.

Если в команде bgerror возникает другая ошибка Tcl (например, потому что команда bgerror не определена), то Tcl сообщает об ошибке, выведя сообщение в stderr.

Если несколько ошибок в фоновом режиме накапливаются до вызова bgerror для их обработки, bgerror будет вызываться один раз для каждой ошибки в порядке их возникновения. Однако, если bgerror возвращается с исключением break, все оставшиеся ошибки пропускаются без вызова bgerror.

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

Пример

Эта процедура bgerror добавляет ошибки в файл с отметкой времени.
proc bgerror {message} {
    set timestamp [clock format [clock seconds]]
    set fl [open mylog.txt {WRONLY CREAT APPEND}]
    puts $fl "$timestamp: bgerror in $::argv '$message'"
    close $fl
}

См. также

after, errorCode, errorInfo, interp

Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TclCmd/bgerror.htm

Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TclCmd/bgerror.htm

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API