biniou a écrit :
Je cherche à implémenter un try catch sous Linux (2.4.18, gcc 2.96) de la même manière que sous Windows, à savoir traiter l'exception capturée dans une nouvelle stack, le but de ce traitement étant de restaurer la stack du process parti en exception dans l'état où elle se trouvait au moment du try...
pour l'instant, l'exception est traitée sur la même stack, ce qui me met un bordel monstre dans la stack en question. Je ne peux donc pas m'assurer que la stack est remise en état à la fin de l'exécution du handler.
Le fait de placer le handler en précisant l'option SA_ONSTACK (je raccourci l'explication là....) ne résoud pas le pb, bien qu'à priori ça devrait faire la chose que j'attends. Si qqun a déjà expérimenté la chose avec succès, merci de m'éclaicir...
|
Perso, pour pocketsmalltalk, je "pliait" la pile de façon qu'à la sortie du handler d'exception le contexte soit celui du handler.
exemple :
Class>>#method
[action] on: Exception do : [ :e | handling]
évolution de la pile :
-------------------------
0 |#method |
-------------------------
1 |#on:do: |
-------------------------
2 |#value |
-------------------------
3 |action1 |
-------------------------
4 |action2 |
-------------------------
5 |action3 |
-------------------------
6 |#signal |
-------------------------
devient :
-------------------------
0 |#method |
-------------------------
1 |#on:do: |
-------------------------
2 |#signal |
-------------------------
3 |[handling]#value |
-------------------------
|
#signal est l'équivalent de throw, #on:do: est l'équivalent de try/catch, le :e est l'exception qui s'est produite et les [] sont des blocs de code exécutés par #value
Mais j'ai tout fait à l'intuite, quel est l'intérêt d'utiliser une deuxième pile plutôt que d'exécuter le handler tout en bas ?
edit : leur mère les smileys on peut pas les virer à l'édit ?
Message édité par nraynaud le 16-02-2003 à 00:35:12