Ten samouczek wyjaśnia, jak włączyć zrzut rdzenia w Linux.
Po przeczytaniu tego samouczka będziesz mógł sprawdzić, czy zrzut rdzenia jest włączony, jak go włączyć lub wyłączyć, jak oglądać i więcej.
Pliki zrzutu podstawowego służą do diagnozowania i debugowania awarii oprogramowania.
Podstawowy zrzut to nieustrukturyzowany rejestr treści pamięci zawierającej informacje na temat wykonywania oprogramowania nieprawidłowo zakończone, w tym przyczynę wypadku.
Innymi słowy, jest to migawka stanu programu z zarejestrowanym procesem wykonania i zakończenia. Możesz pomyśleć o zrzucie rdzenia jako czarnej skrzynce samolotu lub pliku dziennika.
Zarządzanie zrzutami rdzenia może się różnić w zależności od dystrybucji Linuksa do innego, ten samouczek jest zoptymalizowany zarówno pod względem dystrybucji Linux opartych na Debian, jak Ubuntu, jak i Redhat Linux, takich jak CentOS.
Wszystkie instrukcje zawarte w tym artykule zawierają zrzuty ekranu, co ułatwi każdemu użytkownikowi Linuksa do zrozumienia i śledzenia.
Włączanie zrzutu rdzenia w Linux
Pierwszym krokiem jest sprawdzenie, czy włączono zrzut rdzenia. W tym celu użyj następującego polecenia. Jeśli rozmiar pliku podstawowego wynosi 0, jak w poniższym przykładzie, zrzut rdzenia jest wyłączony.
Ulimit -a | Grep Core
Aby włączyć zrzut rdzenia w Linux, z nieograniczonym rozmiarem, użyj następującego polecenia. Następnie wykonaj poprzednie polecenie.
ULIMIT -S -C Unlimited
Aby włączyć zrzut rdzenia na stałe, musisz edytować plik/etc/bezpieczeństwo/limity.conf. Otwórz go przy użyciu uprawnień za pomocą dowolnego edytora tekstu.
sudo nano/etc/bezpieczeństwo/limity.conf
Następnie dodaj następujący wiersz i zamykają zmiany oszczędzające:
* miękki rdzeń nieograniczony
Teraz spróbujmy wykonać aplikację zaprogramowaną do celowego awarii.
Jak widać na zrzucie ekranu poniżej, wygenerowano zrzut rdzenia.
Zgodnie z domyślną konfiguracją w rozkładach Linux opartych na Debian, zrzut rdzenia powinien zostać utworzony w bieżącym katalogu. Możesz to sprawdzić, wykonując następujące polecenie:
LS -LTR ROR
Jak widać na poprzedniej figurze, zrzut rdzenia został odpowiednio wygenerowany.
Aby go wyświetlić, musisz zainstalować debugger GNU. Możesz go zainstalować za pomocą apt, jak pokazano na poniższym obrazku.
Należy pamiętać, że użytkownicy systemów opartych na Redhat muszą korzystać z automatycznego raportowania błędów (ABRT) zamiast GDB.
sudo apt instal gdb -y
Aby wyświetlić podstawowe pliki zrzutu, użyj następującej składni:
GDBrdzeń
W moim przypadku biegam:
GDB CrashingApp Core
Zostaniesz poproszony o naciśnięcie „C” do kontynuowania. Naciśnij go, a zobaczysz raport.
Domyślnie pliki zrzutowe rdzenia są nazywane Core.
jądro sudo sysctl -w.Core_Pattern = Core
Możesz zmienić nazwy i wzorce docelowe, aby łatwo zidentyfikować zrzuty podstawowe.
Polecenie jest następujące:
-%u będzie dołączyć identyfikator użytkownika w nazwie zrzutu podstawowego. - %g będzie obejmować identyfikator grupy i %p PID.
jądro sudo sysctl -w.core_pattern = core-%u-%g-%p
Jak widać, po ponownym wykonaniu aplikacji na awarie generowana jest nowy zrzut rdzenia, w tym UID, GID i PID.
LS -LTR Core*
Istnieją dodatkowe wartości, których można użyć do zdefiniowania wzorów zrzutu podstawowego. Możesz je znaleźć na poniższej liście.
WARTOŚĆ | Funkcjonować |
---|---|
% | „%” jest upuszczony |
%% | Wydaj jeden „%” |
%P | Obejmuje PID |
%P | Obejmuje globalny PID |
%I | Pokazuje identyfikator wątku |
%I | Globalny identyfikator wątku |
%u | Identyfikator użytkownika |
%G | Identyfikator grupy |
%D | Tryb zrzutu |
%S | Numer sygnału |
%T | Czas zrzutu unix |
%H | Nazwa hosta |
%mi | Plik wykonywalny |
%MI | Ścieżka pliku wykonywalna |
Możesz także zdefiniować katalog zrzutów podstawowych, aby je przechowywać.
Składnia jest następująca:
„/Cered” to katalog, w którym zrzuty rdzenia będą przechowywane. Te nazwy będą obejmować zarówno PID, jak i Global PID.
jądro sudo sysctl -w.core_pattern =/rdzeniowe/core-%p-%p
Jak widać, po uruchomieniu aplikacji do awarii, zrzut rdzenia był przechowywany w katalogu /rdzeniowym, w tym zarówno PID, jak i GPID.
LS -LTR /CORED
Jak wyłączyć zrzuty rdzenia w Linux
Wyłączanie zrzutu podstawowego jest tak proste, jak je umożliwić.
Po prostu ustaw limit na 0, uruchamiając następujące polecenie:
Ulimit -s -c 0
Aby trwale wyłączyć zrzut rdzenia, edytuj/etc/bezpieczeństwo/limity.plik CONF za pomocą dowolnego edytora tekstu, jak pokazano na poniższym rysunku.
sudo nano/etc/bezpieczeństwo/limity.conf
Dodaj następujące 2 wiersze, a następnie wyjdź z zapisywania zmian.
* miękki rdzeń 0
* twardy rdzeń 0
Na koniec sprawdź, czy zrzut rdzenia został pomyślnie wyłączony, wykonując następujące czynności:
Ulimit -a | Grep Core
Jak widać limit rozmiaru pliku podstawowego, wynosi 0, zrzut rdzenia jest wyłączony.
Wniosek
Podstawowe zrzuty mogą być bardzo pomocne w procedurach debugowania i identyfikacji awarii. Zaleca się im zapoznanie się z tym, aby poprawić reakcję problemów. Mogą być również przydatne do przechwytywania danych uwolnionych przez pamięć dynamiczną, pobierając informacje o nie działających już programach. Mogą być również pomocne dla programistów w znalezieniu błędów. Podstawowy zrzut może uratować stan procesu w określonym stanie, aby powrócić do niego później. Można go również zrzucić na zdalny host przez sieć (co stanowi ryzyko bezpieczeństwa).