Core-ale pliku core nie ma w bieżącym katalogu?

Podczas uruchamiania programu w C pisze "(Core) " ale nie widzę żadnych plików pod bieżącą ścieżką.

Ustawiłem i zweryfikowałem ulimit:

ulimit -c unlimited 
ulimit -a 

Próbowałem również znaleźć plik o nazwie "core", ale nie dostałem pliku zrzutu rdzenia?
Jakaś pomoc, gdzie jest mój plik core?

Author: Thomas Weller, 2010-01-14

8 answers

Read /usr/src/linux/Documentation/sysctl/kernel.txt .

[/proc/sys/kernel/]core_pattern jest używany do określenia nazwy wzorca pliku dumpfile.

  • Jeśli pierwszym znakiem wzorca jest'/', jądro potraktuje reszta wzorca jako polecenie do uruchomienia. Zrzut rdzenia będzie zapisywane na standardowe wejście tego programu zamiast do pliku.

Zamiast zapisywania zrzutu pamięci na dysk, Twój system jest skonfigurowany aby wysłać go do programu abrt. automatyczne narzędzie do raportowania błędów prawdopodobnie nie jest tak udokumentowane, jak powinno być ...

W każdym razie, szybka Odpowiedź jest taka, że powinieneś być w stanie znaleźć swój plik core w /var/cache/abrt, Gdzie abrt przechowuje go po wywołaniu. Podobnie, inne systemy używające Apport mogą usuwać rdzenie w /var/crash i tak dalej.

 211
Author: ephemient,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-29 12:21:10

W najnowszym Ubuntu (w moim przypadku 12.04) możliwe jest wydrukowanie " Segmentation fault (core dumped)", ale żaden plik core nie został wyprodukowany tam, gdzie można się go spodziewać (na przykład dla lokalnie skompilowanego programu).

Może się to zdarzyć, jeśli masz Rozmiar pliku core ulimit równy 0 (nie zrobiłeś ulimit -c unlimited) -- to jest domyślne w Ubuntu. Normalnie by to stłumiło " (core dumped)", przyklejając się do błędu, ale na Ubuntu, pliki corefile są przekierowywane do Apport (awaria Ubuntu system raportowania) poprzez /proc/sys/kernel/core_pattern, A to wydaje się powodować mylący komunikat.

Jeśli Apport odkryje, że dany program nie jest tym, dla którego powinien zgłaszać awarie (co widać w /var/log/apport.log), wraca do symulowania domyślnego zachowania jądra umieszczania pliku core w cwd (odbywa się to w skrypcie /usr/share/apport/apport). Obejmuje to uhonorowanie ulimita, w którym to przypadku nic nie robi. Ale (zakładam) jeśli chodzi o jądro, został wygenerowany plik corefile (i piped do aportowania), stąd komunikat "Segmentation fault(core)".

Ostatecznie PEBKAC za zapomnienie o ustawieniu ulimita, ale myląca wiadomość sprawiła, że przez chwilę myślałam, że oszaleję, zastanawiając się, co zjadło moje corefile.

(ogólnie rzecz biorąc, strona podręcznika core(5) -- man 5 core -- jest dobrym źródłem informacji o tym, gdzie kończy się Twój plik core i dlaczego nie został napisany.)

 185
Author: jtn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-10 19:35:17

Wraz z uruchomieniem systemd , jest również inny scenariusz. Domyślnie systemd będzie przechowywać zrzuty pamięci w swoim dzienniku, są dostępne za pomocą polecenia systemd-coredumpctl. Zdefiniowany w pliku core_pattern:

$ cat /proc/sys/kernel/core_pattern 
|/usr/lib/systemd/systemd-coredump %p %u %g %s %t %e

To zachowanie można wyłączyć za pomocą prostego "hakowania":

$ ln -s /dev/null /etc/sysctl.d/50-coredump.conf
$ sysctl -w kernel.core_pattern=core      # or just reboot

Jak zawsze, Rozmiar zrzutu rdzenia musi być równy lub większy niż rozmiar zrzutu rdzenia, jak na przykład ulimit -c unlimited.

 68
Author: timss,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-16 10:19:00

Pisanie instrukcji, aby uzyskać zrzut pamięci pod Ubuntu 16.04 LTS :

  1. Jak wspomniał @jtn w swojej odpowiedzi, Ubuntu deleguje wyświetlanie awarii do apport , który z kolei odmawia napisania zrzutu, ponieważ program nie jest zainstalowanym pakietem. Przed dokonaniem zmian

  2. Aby rozwiązać ten problem, musimy upewnić się, że apportzapisuje pliki zrzutu pamięci dla spoza pakietu programów. W tym celu utwórz plik o nazwie ~/.config / apport / settings o następującej treści:
    [main] unpackaged=true

  3. teraz ponownie rozwal program i zobacz pliki awarii generowane w folderze: /var / crash o nazwach takich jak *.1000.crash . Zauważ, że te pliki nie mogą być odczytywane bezpośrednio przez gdb. Po wprowadzeniu zmian
  4. [opcjonalne] aby zrzuty były odczytywane przez gdb, uruchom następujące polecenie:

    apport-unpack <location_of_report> <target_directory>

Bibliografia: Core_dump-Oracle VM VirtualBox

 21
Author: Ankur Roy Chowdhury,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-30 16:23:58

Myślę o dwóch następujących możliwościach:

  1. Jak już zauważyli inni, program może chdir(). Czy uĺźytkownik uĹźywajÄ ... cy program moĹźe zapisaÄ ‡ do katalogu, do ktĂłrego on chdir() jest edytowany? Jeśli nie, nie może utworzyć zrzutu pamięci.

  2. Z jakiegoś dziwnego powodu zrzut pamięci nie nazywa się core.* możesz to sprawdzić /proc/sys/kernel/core_pattern. Ponadto, Komenda find, którą nazwałeś, nie znajdzie typowego zrzutu pamięci. Powinieneś użyć find / -name "*core.*", ponieważ typowa nazwa zsuwki rdzeniowej to core.$PID

 10
Author: ahans,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-02 16:06:17

Jeśli brakuje zrzutu pamięci dla binariów na RHEL i podczas używania abrt, upewnij się, że /etc/abrt/abrt-action-save-package-data.conf

Zawiera

ProcessUnpackaged = yes

Umożliwia to tworzenie raportów o awariach (w tym zrzutów pamięci) dla plików binarnych, które nie są częścią zainstalowanych pakietów (np. lokalnie zbudowanych).

 6
Author: MRalwasser,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-08 16:48:48

Dla fedora25, mogłem znaleźć plik core w

/var/spool/abrt/ccpp-2017-02-16-16:36:51-2974/coredump

Gdzie {[1] } zgodnie z '/ proc/sys/kernel / core_pattern '

 3
Author: mahaveer darade,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-16 12:53:32

Moje wysiłki w WSL nie powiodły się.

Dla tych, którzy pracują w podsystemie Windows dla Linuksa (WSL) wydaje się być otwarty problem w tej chwili dla brakujących plików zrzutu pamięci.

Komentarze wskazują, że

Jest to znany problem, którego jesteśmy świadomi, jest to coś, co badamy.

Problem z Githubem

Windows Developer Feedback

 2
Author: Brandon Søren Culley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-04 00:53:37