2012-10-06 18 views
7

Używam Ubuntu 12.04 LTS. Napisałem prosty program w następujący sposób, aby utworzyć katastrofieNie można utworzyć pliku podstawowego dla mojego uszkodzonego programu

// null.c 
#include<stdio.h> 

int main() 
{ 
    int *p = NULL; 
    int k=*p; 
    printf("%d",sizeof(0)); 
    return 0; 
} 

Teraz biegnę z „gcc -g null.c” a następnie „./a.out”, a wyjście jest zgodnie z oczekiwaniami.

Segmentation fault (core dumped) 

Teraz chcę zobaczyć plik zrzutu pamięci głównej za pomocą gdb. Zrobiłem następujące rzeczy

  1. sprawdziłem aktualny katalog, nie ma rdzeń zrzut
  2. Próbowałem próbował zmienić/proc/sys/kernel/core_pattern z treścią „rdzenia.% E.% p ". Ale nie mogę zapisać w pliku. Mówi "Fsync nie powiodło się".
  3. Użyłem "sudo vi/proc/sys/kernel/core_pattern". Nadal nie mogę zapisać do pliku.

Chcę utworzyć zrzut główny w moim bieżącym katalogu. Co zrobić teraz?

Odpowiedz

19

Twoje prawdziwe pytanie wygląda na to, że nie jest "gdzie jest mój główny zrzut", ale raczej "jak mogę zmienić /proc/sys/kernel/core_pattern".

sudo bash -c 'echo core.%e.%p > /proc/sys/kernel/core_pattern' 

powinien załatwić sprawę.

+0

Zadziałało ... Dzięki :) –

4

trzeba dostosować swój podstawowy limit wielkości zrzutu z następującego polecenia:

ulimit -S -c maksymalna-core-dump-size

wartość jest podana w kilobajtach .

+0

Ustawiłem. Ale jak mogę edytować plik core_pattern? –

2

Nie trzeba używać wzoru rdzenia. jej po prostu zrzuca w tym formacie% e.% p

co trzeba zrobić, to #ulimit -c nieograniczoną

i sprawdzić #ulimit -a

i potwierdzić, czy rozmiar pliku rdzeń jest prawidłowo ustawiony. Otrzymasz rdzeń jako core.pid po tym.

1

Rozumiem, że używanie ulimit nie jest trwałe, tj. Po restarcie limit powraca do zera. Aby mieć nieograniczoną trwałość, należy zmienić /etc/security/limits.conf. Podobnie do wzorca rdzenia itp., Zmień /etc/sysctl.conf.

Powiązane problemy