[Debian]: signal() unter Linux
Hallo,
als ich vor langer langer Zeit noch unter OS/2 und DOS mit dem EMX-GCC
programmiert habe, habe ich mir mal zum Debuggen einen Signalhandler
geschrieben, den ich mit
signal(SIGSEGV, sigsegv_handler)
installiert habe, wobei
void sigsegv_handler(int sig);
So hatte ich bei jedem "uberschreiben von Speichergrenzen kontrolliert
abzubrechen. Unter Linux scheint das jedoch nicht so zu funktionieren,
denn folgendes kleines Programm:
------------------------------------------------------------------------
#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
int SIGSEGV_line;
void sigsegv_handler(int sig)
{
fprintf(stderr, "SIGSEGV in Zeile %i\n", SIGSEGV_line);
fflush(stderr);
abort();
}
int main(void)
{
int *i, j;
if ( signal(SIGSEGV, sigsegv_handler) == SIG_ERR ) return -1;
i = malloc(sizeof(int));
for ( j = 0; j < 1000; j++ ) {
SIGSEGV_line = __LINE__;
printf("%i ", j);
SIGSEGV_line = __LINE__;
i[j] = j;
}
return 0;
}
----------------------------------------------------------------------
Druckt bei mir munter bis 488 (das ist nicht so ganz fest, geringf"ugige
"Anderungen "andern auch den Zeitpunkt des Abbruchs -- wen wunderts?)
und bricht dann mit
Abgebrochen (core dumped)
ab, anstatt meinen Signalhandler zu benutzen.
Hat daf"ur jemand eine Erkl"arung?
Gru"se
Andreas.
------------------------------------------------
Um sich aus der Liste auszutragen schicken Sie
bitte eine E-Mail an majordomo@jfl.de die im Body
"unsubscribe debian-user-de <your_email_address>"
enthaelt.
Bei Problemen bitte eine Mail an: Jan.Otto@jfl.de
------------------------------------------------
Anzahl der eingetragenen Mitglieder: 415
Reply to: