Si se produce una excepción en un bloque try
, ¿cómo se transfiere la ejecución al bloque catch
? Esta no es una pregunta C#/Java/C++, solo me pregunto cómo funciona internamente.¿Cómo se implementan los bloques try/catch?
Respuesta
esto no es una pregunta C#/java/C++. Cómo funciona internamente, cómo sabe la línea ir a la declaración de catch.
La forma en que esto funciona internamente hace que esta sea prácticamente una pregunta C#/java/C++ (porque se implementará de manera diferente).
En Java, un bloque try se instala en una tabla especial (en el archivo de clase). Cuando la JVM arroja una excepción, mira esa tabla para ver dónde está el próximo bloque catch o finally to read.
Cuando ocurre una excepción, se ejecuta una instrucción especial (generalmente llamada interrupción). Esto lleva a la ejecución de un controlador de error genérico que deduce cuál es el último manejador de excepciones adecuado instalado. Ese controlador se ejecuta luego.
que debería funcionar en todos los langues algo como esto:
if (error_occured xy while doing things in try){
call_catch_part(error xy)
}
Se trata básicamente de parseando fundamentos de la lengua. Puede obtener toda la información en Here
Existe una diferencia sobre cómo se manejan técnicamente las excepciones entre lenguajes nativamente compilados como C++ y los lenguajes que usan byte-código que se ejecuta en una máquina virtual como Java o C#.
Los compiladores de C++ generalmente generan código que protocoliza la información necesaria para el manejo de excepciones en tiempo de ejecución. Se utiliza una estructura de datos dedicada para recordar la entrada/salida de los bloques try y el manejador de excepciones asociado. Cuando se produce una excepción, se genera una interrupción y el control pasa al sistema operativo, que a su vez inspecciona la pila de llamadas y determina a qué controlador de excepciones debe llamar.
Más detalles están muy bien explicadas en el siguiente artículo de Vishal Kochhar:
En Java o .NET no hay necesidad de que la sobrecarga de mantener información de gestión de excepciones ya que el tiempo de ejecución podrá introspectar el código de bytes para encontrar el manejador de excepciones relevante. Como consecuencia, solo las excepciones que realmente se lanzan están causando una sobrecarga.
- 1. ¿Cómo se implementan los C# Generics?
- 2. javascript internals: cómo se implementan los eventos?
- 3. ¿Cómo se implementan los analizadores DOM?
- 4. ¿Cómo implementan los structs los genéricos?
- 5. tryCatch y ggplot
- 6. ¿Cómo se implementan los argumentos variables en gcc?
- 7. ¿Cómo se implementan los trabajos cron en producción?
- 8. ¿Cómo se implementan los métodos, `classmethod` y` staticmethod` en Python?
- 9. ¿Cómo se implementan los cambios en el nivel de hardware?
- 10. ¿Cómo se implementan los generadores y coroutines en CPython?
- 11. ¿Cómo se implementan las clases en los compiladores
- 12. ¿Cómo se implementan los bloqueos de lectura/escritura en pthread?
- 13. Uso de tryCatch y fuente
- 14. ¿Cómo se implementan las enumeraciones en Java?
- 15. ¿Cómo se implementan las matrices en Perl?
- 16. ¿Los bloques Objective-C se liberan automáticamente?
- 17. ¿Cómo se implementan las matrices en Java?
- 18. ¿Cómo se implementan las referencias débiles?
- 19. ¿Cómo implementan JVM IdentityHashMap?
- 20. ¿Cómo se leen los bloques de comentarios en PHP?
- 21. ¿Cómo se revisan los bloques grandes del nuevo código
- 22. ¿Por qué no se implementan los mapas C++ como intentos?
- 23. pros y contras de TryCatch versus TryParse
- 24. ¿Cómo se manejan los tipos mixtos cuando se implementan operadores de comparación?
- 25. Eliminación de los miembros que implementan IDisposable
- 26. ¿Cómo funcionan los 'bloques' de Clang?
- 27. ¿Cómo implementan los clientes de Redis la canalización?
- 28. ¿Se implementan Markov Random Fields en OpenCV?
- 29. ¿Dónde se almacenan los bloques CMS estáticos de Magento?
- 30. Hacer que los bloques de iOS se ejecuten sincrónicamente
que es todo lo que se sabe .. el controlador de niños se ejecuta primero .. estoy esperando la respuesta del software del sistema/assembly /.net framework – selvaraj
podría explicar que la instrucción especial que sea lo que piense – selvaraj
@saj: en programas C++ nativos se usa una instrucción de procesador especial 'int' que se ejecuta y detiene el programa y luego el control se transfiere automáticamente al controlador de interrupción del sistema operativo que a su vez, ve que es una excepción de C++ y transfiere el control al controlador de excepciones de C++. – sharptooth