Для начала я укажу операционную систему здесь RTEMS, он является открытым исходным кодом RTOS и источник можно найти здесь:Причинение в программе выдаёт ошибку сегментации не попадитесь обработчика сигнала
у меня есть довольно простая программа, которая устанавливает обработчик сигнала для SIGSEGV (который я считаю, поддерживается) с помощью sigaction вызова из документации здесь:
http://docs.rtems.org/releases/rtemsdocs-4.9.2/share/rtems/html/posix_users/posix_users00033.html
Моя программа по существу вскипает к этому:
void HandleAndPrintSignal()
{
printf("I am in the segfault signal handler AND I WILL HANDLE YOUR SIG!!!!\n");
exit(1);
}
void *POSIX_Init(void *args)
{
printf("BENS BIG NOTE: Initializing Signal Handler\n");
struct sigaction sa;
sa.sa_handler = HandleAndPrintSignal;
sigemptyset(&sa.sa_mask);
sa.sa_flags = SA_SIGINFO;
if (sigaction (SIGSEGV, &sa, 0)) {
printf("A ERROR OCCURED WITH THIS!");
exit(1);
}
int *p = NULL;
*(p--) = 5; // Causes segfault
}
Однако, проблема заключается в том, что, когда я вызвать Segfault в моей программе, обработчик сигнала не вызывается, но вместо того, чтобы процесс ядра называется в vectors_init.c
(источник RTEMS) для печати трассировки стека , Есть ли что-то особенное, что мне нужно сделать, чтобы получить сигнал SIGSEGV в моей программе rtems?
Полностью ли RTEMS поддерживает обработку сигналов POSIX? –
@JoachimPileborg Насколько я могу судить, он: http://docs.rtems.org/doc-current/share/rtems/pdf/posix1003_1.pdf в разделе 3.3.1.1, он определяет сигналы и SIGSEGV как реализованные. –
Я не думаю, что вы вызываете 'printf' или' exit' из обработчика сигнала. –