Gdzie szukać pliku podstawowego wygenerowanego przez awarię aplikacji linux?


19

Próbuję znaleźć przyczynę awarii jednej z moich aplikacji Linux. Ale nie wiem, dokąd zmierza rdzeń.

cat /proc/sys/kernel/core_pattern
core.%e.%p

Dowolny pomysł?

Odpowiedzi:


23

Zrzut rdzenia zapisywany jest w bieżącym katalogu procesu w momencie awarii.

Oczywiście zrzuty rdzenia muszą być włączone, domyślnie są one zwykle wyłączone. Sprawdź dane wyjściowe ulimit -c, jeśli jest to 0, to nie zostanie zapisany żaden plik rdzenia. Uruchom, ulimit -c unlimitedaby włączyć zrzuty pamięci; jest to ustawienie na proces, które jest dziedziczone przez procesy uruchomione przez ten proces.

Jeśli powinien zostać wygenerowany zrzut rdzenia, ale nie wiesz, gdzie to jest, możesz ponownie rozpocząć proces (jeśli natychmiast się nie zawiesi), a następnie sprawdź jego katalog roboczy, wykonując ls -l /proc/$pid/cwdgdzie $pidjest identyfikatorem procesu. Ten link wskaże bieżący katalog roboczy tego procesu. Są szanse, że zrzut rdzenia będzie tam. W przeciwnym razie musisz uruchomić findna całym systemie ...


3
Sprawdziłem, czy ulimit -c jest nieograniczony, ale wciąż nie ma nic w bieżącym katalogu procesu.
dcds

1
Możliwe, że aplikacja sama wykryła błąd krytyczny i została przerwana, tzn. Nie jest to „rzeczywista” awaria, taka jak naruszenie segmentacji lub podobne, co spowodowałoby zrzut pamięci. Ponieważ nie podajesz żadnych informacji o aplikacji, nie możesz tego wiedzieć.
wurtel

1
To zdecydowanie awaria, bo świadomie robię zerowy wskaźnik.
dcds

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.