¿Hay alguna manera de detectar el "error de intérprete Tcl" global? Por ejemplo, me gustaría almacenar automáticamente en algún archivo el mensaje que sigue.Capture "Tcl Interpreter Error"
Respuesta
El comando central para atrapar cualquier tipo de error lanzado por Tcl es catch
. Se necesita al menos un argumento, un script para evaluar y devuelve el código de resultado de la evaluación de ese script. El código de resultado es 1
cuando ocurre un error, 0
cuando no hubo ningún error, y un montón de otras cosas en otros casos (que indican otros tipos de excepción que generalmente no son errores). El catch
también toma un argumento opcional que nombra una variable en la cual escribir el resultado de evaluar el script o el mensaje de error. La variable global errorInfo
contendrá el seguimiento de pila en el caso de un error (o de 8.5 en adelante puede obtener el diccionario de estado del intérprete con otro nombre de variable pasado a catch
).
Para atrapar un error en una secuencia de comandos “foo.tcl”, se utiliza un código como éste:
if {[catch {source foo.tcl} msg]} {
puts "I got an error: $msg"
puts "The stack trace was this:\n$errorInfo"
}
Es hasta usted para encontrar la manera de escribir que en un archivo si lo desea. (Utilizo esta técnica con un script externo que implementa una trampa de error cuidadosamente probada y que carga un script interno que hace el trabajo real. Creo que funciona bien o puede llamar a procedimientos en ese script "atrapado". Depende de usted realmente ; Tcl debe hacer todos errores capturable, y hay muy pocas condiciones que se deslizan a través)
La otra ruta que los errores pueden ser reportados es a través de bgerror
, que se llama para controlar los errores que se producen durante el evento. tratamiento. Es un procedimiento que puede escribir su propia versión de; le será dada un solo argumento cuando se llama que es el mensaje de error, y tendrá el mundial errorInfo
ajustado correctamente cuando se le llama:
proc bgerror {msg} {
global errorInfo
puts "I got an error in an event: $msg"
puts "The stack trace was this:\n$errorInfo"
}
Si no hay aplicación de bgerror
definido, el seguimiento de la pila se acaba de escribir a la stderr
canal. Si está utilizando el paquete Tk, se proporciona una implementación de bgerror
que muestra un cuadro de diálogo que describe el problema.
Pruebe los comandos bgerror o interp bgerror.
Lea la documentación de bgerror, tiene un ejemplo simple.
- 1. C# Console/CLI Interpreter?
- 2. numpy y Global Interpreter Lock
- 3. Intente/Capture un error de segmentación en Linux
- 4. ¿Cómo ejecutar el script tcl en otro script tcl?
- 5. TCL: buscar recursivamente subdirectorios para obtener todos los archivos .tcl
- 6. Java "máquina virtual" vs. Python "Interpreter" lenguaje?
- 7. Python Interpreter en Emacs repite líneas
- 8. ¿Es "Jint - JavaScript Interpreter for .NET" confiable?
- 9. Tcl Funciones anónimas
- 10. cadena TCL concat
- 11. Tcl/Tk ejemplos?
- 12. Capture UIView como UIImage
- 13. android capture video frame
- 14. Salida de Capture Ant
- 15. capture the last WM_SIZE
- 16. ¿Necesitamos "desarmar" variables en TCL?
- 17. Características ocultas de TCL/TK
- 18. TCL espera la expresión regular
- 19. org-mode capture with sexp
- 20. WCF WebGet Capture HTTP Referrer?
- 21. capture process output in Groovy
- 22. ¿Cómo inicializar una matriz en Tcl?
- 23. cómo usar sed de un archivo TCL
- 24. Capture xsl: mensaje de salida en java
- 25. Ruby Regex, Only One Capture (¡Muy simple!)
- 26. ¿Es el Hotspot JVM Bytecode Interpreter un JIT de rastreo?
- 27. cómo repetir el último comando en OCaml interpreter shell
- 28. Python Interpreter Shell con integración Vi (m) posible?
- 29. Error al construir Omnet ++: No se pueden construir aplicaciones Tcl/Tk en Mountain lion
- 30. aritmética de números complejos en Tcl?
Buena sugerencia. Pero no funciona. :(Todavía me aparece 'Tcl Interpreter Error: no se puede leer" on1 ": no existe tal tipo de variable en el terminal, pero no en la función. – ilya1725