Gdy moja aplikacja ulega awarii z błędem segmentacji, chciałbym uzyskać zrzut pamięci z systemu. To zrobić poprzez skonfigurowanie przed rękąLinux: obsługa błędu segmentacji i generowanie zrzutu pamięci
ulimit -c unlimited
Chciałbym również mieć wskazanie w moich dziennikach aplikacji, że usterka została segmentacja wystąpił. Robię to za pomocą sigaction()
. Jeśli jednak to zrobię, sygnał nie osiągnie domyślnej obsługi, a zrzut pamięci nie zostanie zapisany.
W jaki sposób mogę zrzucić zarówno rdzeń systemu, jak i linię dziennika z mojej własnej procedury obsługi sygnału w tym samym czasie?
Czy możesz opracować? – Short
Obawiam się, że nie mogę. – shoosh
Nie działa to w wersji Redhat 6, której testowałem i powoduje pętlę regresywną, w której program obsługi nie jest resetowany. Działa, jeśli przechowujesz stary moduł obsługi podczas wywoływania sigaction i jawnie resetujesz go w procedurze obsługi SIGSEGV. – phenompbg