Gdzie mogę znaleźć zrzut pamięci w Ubuntu 16.04LTS?


14

Mam program C ++, który robi to, co powinien, ale musi być jakiś problem ze wskaźnikiem, ponieważ zawiesza się na końcu i tworzy zrzut pamięci. Mój problem polega na tym, że nie mogę znaleźć pliku podstawowego, więc nie mogę go debugować.

próbowałem

ulimit -c unlimited
ulimit -a

a teraz wymiar pliku jest ustawiony na nieograniczony, ale nadal nie mogę znaleźć rdzenia. Próbowałem w każdym folderze tutaj napisanym , ale nadal wydaje się, że nie jest tworzony żaden plik podstawowy.

Gdzie mogę to znaleźć?


Aktualny katalog, lub/var/crash
waltinator,

4
Chociaż jest to prawda w większości przypadków, @waltinator, czasami trzeba to sprawdzić /var/log/apport.log, ponieważ nowoczesne wersje Ubuntu używają Apport, który może w nieoczywisty sposób zakłócać zrzutowanie rdzenia. Aby uzyskać więcej informacji, zobacz stackoverflow.com/a/18368068/1772379
Ben Johnson,

Odpowiedzi:


12

W Ubuntu zrzuty rdzenia są obsługiwane przez Apport i mogą być zlokalizowane w /var/crash/. Ale jest domyślnie wyłączone w stabilnych wersjach.

Aby włączyć Apport, uruchom: sudo systemctl enable apport.servicelub sudo service apport start.


Aby wyłączyć, uruchom: sudo systemctl disable apport.servicelub sudo service apport stopw celu powrotu do zwykłej podstawowej metody zrzutu. Zobacz: Jak włączyć lub wyłączyć Apport? .

Aby trwale wyłączyć, edytuj /etc/apport/crashdb.confplik i skomentuj następujący wiersz:

'problem_types': ['Bug', 'Package'],

dodając symbol skrótu ( #) na początku wiersza.

Aby wyłączyć raportowanie awarii (powrót do normy), usuń symbol skrótu (taki sam, jak był).


Możesz także sprawdzić core_pattern, jak jądro obsługuje zrzuty pamięci:

$ cat /proc/sys/kernel/core_pattern
|/usr/share/apport/apport %p %s %c

Więc nawet podstawowe pliki są wyłączone przez ulimit, apportnadal przechwytują awarię.

Zobacz też:


4

Dla tych googlinów: (w moim przypadku - Ubuntu 16.04 i 18.04 i aplikacja niestandardowa) /var/crashbyła nadal pusta, więc szybki sposób obsługiwał tworzenie rdzenia (pod warunkiem, że np. Używasz odpowiedniego ustawienia wbudowanego ulimit ) był

sudo sysctl -w kernel.core_pattern=core.%u.%p.%t # to enable core generation

i

systemctl restart apport # to restore default apport settings
# which, by the way, were "|/usr/share/apport/apport %p %s %c %d %P" (without quotes)


Źródła:


Prosty, bezpośredni, działał.
Taekahn
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.