[C] Continuer un programme apres un SIGSEGV

Continuer un programme apres un SIGSEGV [C] - C - Programmation

Marsh Posté le 10-07-2005 à 16:35:20    

Voila, j'ai deja vu des programmes faire cela, style flashFXP
 
Dans mon code je load des Dll dynamiquement, au bon vouloir de l'uttilisateur
J'aimerai que le programme principal ne plante pas si une des dll chargé plante
 
Donc je traine bien le signal sigsegv, mais comment ne pas arreter le programme ?
Merci d'avance

Reply

Marsh Posté le 10-07-2005 à 16:35:20   

Reply

Marsh Posté le 10-07-2005 à 16:39:44    

et tu fais comment pour savoir d'où vient le segfault, et surtout comment tu fais pour savoir si la mémoire de ton processus n'a pas été corrompue ? Pour moi c'est clair, en cas de SGISEGV, il ne FAUT RIEN FAIRE

Reply

Marsh Posté le 10-07-2005 à 16:45:41    

Je pourrai toujours conseiller de redemarer le prog en cas de segfault, mais il faudrai vraiment que je gère moi meme l'arret de programme
 
J'pense pas qu'il yai beaucoup de chances qu'un segfault d'une dll fasse foiré la mémoire de mon programme principal

Reply

Marsh Posté le 10-07-2005 à 17:46:46    

et il se passe quoi si arrive quand même et que tu enregistres des données corrompues par exemple ? t'es dans la merde. en cas de SIGSEGV,  y a rien à faire. Laisser crever. Ça ne t'empêche pas d'avoir un gestionnaire de programme externe qui va relancer ton programme ensuite. D'après toi, pourquoi ta DLL segfault ? parce qu'elle essaie d'écrire où elle a pas le droit. Seulement elle a certainement écrit des tas de conneries là où elle pouvait. En plus, son chargement a certainement acquis pas mal de ressources, impossible à libérer. Bref, si tu continues à travailler après un SIGSEGV, tu as sans doute :
- ta pile corrompue
- tes données corrompues
- un état incohérent de ton application.
 
Bref, tout est compromis.

Reply

Marsh Posté le 10-07-2005 à 19:39:25    

Je vois, je vais opter pour une autre solution alors
Merci beaucoup :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed