Все команды DbgNub_
, упомянутые в трассировке стека, являются дополнительными инструментами отладки Komodo (скрыть их в трассировке стека теоретически возможно, но грязно и инструментарий , очевидно, фактически не делает этого ). Как правило, вы, вероятно, игнорируете эти команды, поскольку их не будет при развертывании.
Если мы игнорируем DbgNub_uplevelCmd
бит, мы получим:
Info String for error
invoked from within
"Div $a $b"
invoked from within
"Div2 $a $b"
invoked from within
"Div3 10 0"
invoked from within
"DbgNub_Do 0 {1 17 {249 27}} {puts "Result = [DbgNub_Do 1 {1 17 {265 9}} {Div3 10 0}]"}"
Это очень похоже к стандартной трассировке, за исключением отсутствия информации о номере строки (и DbgNub_Do
, который, очевидно, является инструментом для кода внутри catch
напрямую).
Как правило, статус результата Tcl состоит из:
- Результат код . Это
TCL_OK
(= 0) при успешном выполнении фрагмента кода, TCL_ERROR
(= 1), если было сгенерировано исключение, и несколько других значений для других вещей (TCL_RETURN
, TCL_BREAK
и TCL_CONTINUE
). Эти имена определены на уровне C. - Результат значение , хранящийся в интерпретаторе. В древних версиях Tcl это была простая строка, но это было типизированное значение с подсчетом ссылок более 20 лет. (У Tcl есть система типов. Она очень сильно отличается от всех остальных языков тем, что строки являются супертипом всех других типов.)
- Результат словарь , который содержит дополнительную информацию. Стандартные записи (можно также определить свои собственные) в этом:
- Информация об ошибке, то есть трассировка стека, которая записывается в глобальный
errorInfo
для поддержки старого кода. Только действительно значимо для ошибок. - Код ошибки, машиночитаемый дескриптор исключения, который записывается в глобальный
errorCode
для поддержки старого кода. Опять же, только действительно значимо для ошибок. - Строка ошибки. Бит, используемый для генерации числа в сообщении
(procedure "Div" line 1)
и т. Д. - Уровень, используемый
return
для многоуровневого возврата.
Есть некоторые другие фрагменты, которые включаются только в нескольких случаях (например, когда предложение try
*1050* вызывает исключение, когда тело исключения выбрасывает, грубый случай в лотах языков).