| 

.NET C# Java Javascript Exception

2
Servus zusammen, mal wieder eine Frage bezüglich eines aaaalllllttteeeen C-Programms, dass ich *freu* betreuen darf. Es handelt sich um C - wie gesagt - natürlich mit einer main loop. Davor werden Handler für Signals festgelegt. Ungefähr so:

void MAIN(int *st)
{
...
signal(SIGSEGV, DA_HANDLER);
...
main_loop();
...
}

Problem ist, dass ich einen Programmabbruch habe. Wenn ich das Ganze mit WinDbg untersuche, zeigt es mir ein ACCESS_VIOLATION an. Jedoch geht er nicht in den Handler! Wieso?
Und noch was dazu: Ich weiss, dass man den Grund für die Speicherveletzung finden und eliminieren sollte (wird auch geschehen). Aber da es sich um eine bestehende Applikation handelt, die relativ häufig unerwartet in die Grätsche geht, brauche ich erstmal was, um zumindest noch was rauszuschreiben oder so!
02.05.2012
Eiger 1,9k 2 9
2 Antworten
1
Das ist ja wirklich schon lange her. So weit ich mich entsinne, lässt sich einstellen, ob ein Signal mit einem Handler verarbeitet werden kann oder ignoriert wird.

Wenn ich Google frage, kommen hier viele Infos dazu: Signal Handling.

Ist zwar sehr umfangreich, aber vielleicht hilft's dir.
02.05.2012
jsc 289 1 7
Hmm, ok viel Info. Aber das hier:
"Macro: int SIGSEGV
This signal is generated when a program tries to read or write outside the memory that is allocated for it. (Actually, the signals only occur when the program goes far enough outside to be detected by the system's memory protection mechanism.)..."
ist schonmal interessant. Vielleicht ist das der Grund, warum es bei mir nicht in den Handler kommt...!?!
Eiger 02.05.2012
Wenn zu dem Zeitpunkt der Stack schon geschrottet ist kommt dein Programm in keinen Handler mehr ;-)
Ich kann hier nur den Einsatz eines Malloc Debuggers empfehlen - hatte ich dir an anderer Stelle glaube ich schon einmal geraten :)
puls200 02.05.2012
Jaja, nur der debugger ist nicht mein Problem. Ich habe schon einen benutzt und der sagt mir ja auch, dass ich eine ACCESS_VIOLATION (first chance) habe. Aber kann ich das echt nicht abfangen. Also nicht abfangen, sondern nur detektieren und wichtige Sachen erledigen ;-)
Eiger 02.05.2012
1
Ich nehme an, es ist ein Windows-Programm? In der Doku steht allerdings auch folgendes:
The SIGILL, SIGSEGV, and SIGTERM signals are not generated under Windows NT. They are included for ANSI compatibility.
(Doku VS 2003)
The SIGILL and SIGTERM signals are not generated under Windows NT.
(Doku VS 2005)
The SIGILL and SIGTERM signals are not generated under Windows. They are included for ANSI compatibility.
(Doku VS 2008 und neuer)

Kann sein dass es daran liegt, dass dein Handler nicht ausgeführt wird. Der ganze Mechanismus stammt ja aus der Unix-Welt.
02.05.2012
puls200 3,8k 7
Das wenn ich wüsste... Aber danke für die Info!
Eiger 03.05.2012

Stelle deine C-Frage jetzt!