[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[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: