Het volgende is mijn probleem:
In windows kan je access violations afvangen dmv een simpele try {} catch, in Linux kan dit echter niet, je krijgt gelijk een SIGSEGV en er wordt geen exception gethrowed. Je kan vanuit signal handlers ook geen exceptions throwen.
Voorbeeldje:
Gevolg: Linux gooit een SIGSEGV, signal handler (als die er is) wordt gecalled, ipv dat er gewoon een exception wordt gethrowed.
Het probleem is namelijk dat ik bezig ben met het porten van een programma dat veel gebruik maakt van exceptions catchen voor vanalles. In windows gaat dat allemaal prima, exception gevangen, geeft netjes een melding en draait verder. Ookal vang ik in Linux het signal netjes af met een signal handler blijft hij na het afhandelen in dezelfde functie, dus blijven er segfaults komen.
Dus, nu is mijn vraag: hoe kan ik ervoor zorgen dat linux óf netjes een exception throwt ipv een signal óf hoe kan ik na het afhandelen van het signal een exception throwen ipv terug te keren naar de function die de exception veroorzaakte?
In windows kan je access violations afvangen dmv een simpele try {} catch, in Linux kan dit echter niet, je krijgt gelijk een SIGSEGV en er wordt geen exception gethrowed. Je kan vanuit signal handlers ook geen exceptions throwen.
Voorbeeldje:
C++:
1
2
3
4
5
6
7
8
9
10
11
| #include <stdio.h> int main(void) { try { char *bla = 0; *bla = 1; } catch (...) { printf("Gevangen"); } } |
Gevolg: Linux gooit een SIGSEGV, signal handler (als die er is) wordt gecalled, ipv dat er gewoon een exception wordt gethrowed.
Het probleem is namelijk dat ik bezig ben met het porten van een programma dat veel gebruik maakt van exceptions catchen voor vanalles. In windows gaat dat allemaal prima, exception gevangen, geeft netjes een melding en draait verder. Ookal vang ik in Linux het signal netjes af met een signal handler blijft hij na het afhandelen in dezelfde functie, dus blijven er segfaults komen.
Dus, nu is mijn vraag: hoe kan ik ervoor zorgen dat linux óf netjes een exception throwt ipv een signal óf hoe kan ik na het afhandelen van het signal een exception throwen ipv terug te keren naar de function die de exception veroorzaakte?