Jak możemy prześledzić problemy z awariami programów w systemie Linux?

12

Jeśli aplikacja ulegnie awarii w systemie Windows, możemy sprawdzić Podgląd zdarzeń w narzędziach administracyjnych, aby zobaczyć, co się zawiesiło. Czasami zawiera przydatne informacje, których inni nie, ale to dopiero początek.
W Linuksie, jeśli aplikacja (jakakolwiek) ulega awarii, gdy zaczyna się śledzić, co się stało?
Czy istnieje np. Jakiś dziennik centralny lub coś podobnego?

Jim
źródło
2
Standardowym sposobem debugowania tego rodzaju rzeczy jest ręczne uruchomienie problematycznej aplikacji z terminala. W ten sposób możesz wyświetlić wydrukowane komunikaty o błędach.
terdon
2
64-bitowe wersje Linuksa rejestrują krótki opis zawieszonego procesu (takiego, który zmarł z powodu sygnału) /var/log/syslog. Linux umożliwia demonowi powiadamianie o awariach procesów. Ubuntu apport i Red Hat ABRT wykorzystanie tego, aby zapewnić scentralizowane rejestrowanie i raport generacji urządzeń. Zasadniczo zrzut pamięci jest zapisywany, dzięki czemu można wywołać debugger w programie, który uległ awarii.
Mark Plotnick
Poparłbym to pytanie, ale wydaje się, że PO nie chce pomagać społeczności, przyjmując lub publikując odpowiedź, więc znajdę podobne pytanie, które akceptuje odpowiedź i głosuję na to, mając nadzieję, że to zrobi wspiąć się na szczyt wyników wyszukiwania i pomóc przyszłym wyszukiwarkom
Mawg mówi, że przywróć Monikę

Odpowiedzi:

13

Czy istnieje np. Jakiś dziennik centralny lub coś podobnego?

Normalne miejsce na dzienniki systemowe to /var/log/. To, co jest umieszczane w każdym dzienniku, zależy od konfiguracji syslog, ale zwykle wszystko oprócz logowań przechodzi /var/log/syslog.

Nie gwarantuje to, że w przypadku problemów poszczególne aplikacje pozostawią jakąkolwiek wskazówkę. Ale oni lub powłoka prawdopodobnie wyplują coś ze standardowych strumieni wyjściowych / standardowych błędów, a jeśli uruchomisz kłopotliwą aplikację na pierwszym planie z terminala, będziesz mógł zobaczyć te rzeczy.

Złotowłosa
źródło
Czego należy szukać /var/log? Który plik dziennika? Czy istnieje jakaś konwencja?
Jim
2
Jeśli możesz spowodować awarię, zrób to, a następnie sprawdź, który plik w katalogu / var / log został ostatnio zmieniony. Z ls -lartostatnim plikiem na liście został ostatnio zmieniony.
Devon_C_Miller
Istnieje konwencja s - Linux jest znacznie bardziej zróżnicowane niż okna. Syslog odnosi się do rejestratora systemu, ale nie ma uniwersalnej implementacji, a odmiany można następnie skonfigurować na różne sposoby. Ogólna logika polega na tym, że aplikacje są wysyłane do syslog, a następnie są one sortowane w różne pliki. Jak wspomniano, zwykle wszystko kończy się /var/log/syslog, ale różne dystrybucje działają inaczej. Jeśli wiesz, jakiego syslog używasz, możesz sprawdzić jego konfigurację, aby to ustalić.
goldilocks
6

Na Ubuntu segfault pisze się pod adresem /var/log/kern.log. Przetestowałem to, tworząc program, który segfaultuje:

void main() {
    int *a=0;
    *a=0;
}

Po tym, jak doszło do awarii, pojawiła się następująca linia /var/log/kern.log:

a.out[534]: segfault at 0 ip 08048432 sp bfaec8c0 error 6 in a.out[8048000+1000]
sashoalm
źródło
1

W Ubuntu, jeśli uruchamiasz aplikację z pliku uruchamiającego .desktop, dodaj opcję Terminal=truedo pliku .desktop.

Selah
źródło