elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  "Capturar" Violación de segmento (`core' generado)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: "Capturar" Violación de segmento (`core' generado)  (Leído 5,796 veces)
mart412

Desconectado Desconectado

Mensajes: 1


Ver Perfil
"Capturar" Violación de segmento (`core' generado)
« en: 19 Octubre 2016, 16:36 pm »

Buenas, mi duda es sobre si es posible capturar de alguna forma un error de violacion de segmento para que el programa no 'explote'. Gracias


En línea

dato000


Desconectado Desconectado

Mensajes: 3.034



Ver Perfil
Re: "Capturar" Violación de segmento (`core' generado)
« Respuesta #1 en: 19 Octubre 2016, 17:09 pm »

Buenas, mi duda es sobre si es posible capturar de alguna forma un error de violacion de segmento para que el programa no 'explote'. Gracias

Claro que se puede, el proceso para eso se llama debug.


En línea


Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: "Capturar" Violación de segmento (`core' generado)
« Respuesta #2 en: 19 Octubre 2016, 20:34 pm »

https://en.wikipedia.org/wiki/C%2B%2B#Exception_handling

Código
  1. try
  2. {
  3. int *x = 0;
  4. *x = 666;
  5. }
  6. catch(...)
  7. {
  8. cout << "doh";
  9. }

Ahora podes investigar al respecto, te recomiendo leer el capitulo correspondiente de cualquier libro de C++.

PD. Depurar es otra cosa.
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
class_OpenGL


Desconectado Desconectado

Mensajes: 437

Si usas Direct3D, no eres mi amigo :P


Ver Perfil
Re: "Capturar" Violación de segmento (`core' generado)
« Respuesta #3 en: 19 Octubre 2016, 21:40 pm »

Yo me había alegrado tanto cuando Eternal Idol había puesto ese código, creyendo yo que se podría manejar una excepción de acceso de memoria no permitido... pero no funciona, el programa ese se cuelga (crash) en Windows 8.1... Lástima :(
En línea

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL
geeke

Desconectado Desconectado

Mensajes: 93


Ver Perfil
Re: "Capturar" Violación de segmento (`core' generado)
« Respuesta #4 en: 19 Octubre 2016, 22:44 pm »

No puedes usar los bloques try/catch para capturar un segmentation fault, porque no es una excepción mas bien es una señal que el sistema operativo envía como consecuencia al intentar acceder en alguna zona de memoria no permitida. Además no veo razón para hacer esto, porque continuar el programa después no es posible se invocaría comportamiento indefinido y esto no es nada seguro.
En línea

class_OpenGL


Desconectado Desconectado

Mensajes: 437

Si usas Direct3D, no eres mi amigo :P


Ver Perfil
Re: "Capturar" Violación de segmento (`core' generado)
« Respuesta #5 en: 19 Octubre 2016, 22:56 pm »

Hablando de CPU, si que se trataría de una excepción (lanzada por la CPU). Otra cosa es lo que considera C++/Sistema Operativo. Hubiera estado bien para ciertos casos.
En línea

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL
geeke

Desconectado Desconectado

Mensajes: 93


Ver Perfil
Re: "Capturar" Violación de segmento (`core' generado)
« Respuesta #6 en: 19 Octubre 2016, 23:09 pm »

Hablando de CPU, si que se trataría de una excepción (lanzada por la CPU). Otra cosa es lo que considera C++/Sistema Operativo.

Tienes razón es una excepción lanzada por la CPU, pero el sistema operativo la envía como una señal de que ocurrió algún error a nivel hardware.
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: "Capturar" Violación de segmento (`core' generado)
« Respuesta #7 en: 19 Octubre 2016, 23:32 pm »

Ese es el mecanismo standard que provee el lenguaje C++ para capturar excepciones lo cual no implica que esta en particular sea controlada por C++. En Windows, donde no hay ninguna señal, el codigo funciona perfectamente con VC++ (aunque lo ideal seria usar SEH). En POSIX tenes: https://en.wikipedia.org/wiki/Sigaction

Código
  1. __try
  2. {
  3. int *x = 0;
  4. *x = 666;
  5. }
  6. __except( EXCEPTION_EXECUTE_HANDLER)
  7. {
  8. cout << " doh";
  9. }

Y mas informacion para concluir: https://en.wikipedia.org/wiki/Segmentation_fault
« Última modificación: 20 Octubre 2016, 00:22 am por Eternal Idol » En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines