2012-10-06 10 views
7

Ich benutze Ubuntu 12.04 LTS. Ich schrieb ein einfaches Programm wie Crash erstellen folgtIch kann keine Kerndatei für mein abgestürztes Programm erstellen

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

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

Jetzt habe ich mit „gcc -g null.c“ laufen und dann „./a.out“ und der Ausgang wird wie erwartet.

Jetzt möchte ich die Core-Dump-Datei mit Gdb sehen. Ich habe folgende Dinge

  1. ich das aktuelle Verzeichnis überprüft, gibt es keine Core-Dump-Datei
  2. Ich habe versucht, versucht, das/proc/sys/kernel/core_pattern mit dem Inhalt „Kern zu ändern.% E.% p ". Aber ich kann nicht in die Datei schreiben. Es sagt "Fsync fehlgeschlagen".
  3. Ich habe die "sudo vi/proc/sys/kernel/core_pattern" verwendet. Kann immer noch nicht in die Datei schreiben.

Ich möchte den Core-Dump in meinem aktuellen Verzeichnis erstellen. Was nun?

Antwort

19

Ihre eigentliche Frage scheint nicht zu sein "wo ist mein Kernspeicherauszug", sondern "wie kann ich /proc/sys/kernel/core_pattern ändern".

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

sollte den Trick tun.

+0

Es hat funktioniert ... Danke :) –

4

Sie benötigen Coredump Größenbegrenzung mit folgendem Befehl anzupassen:

ulimit ES -c Maximum-Core-Dump-Größe

Der Wert wird in Kb gegeben .

+0

Ich stelle es ein. Aber wie kann ich die core_pattern-Datei bearbeiten? –

2

Sie müssen nicht Kernmuster verwenden. seine Dumps nur in diesem Format% e.% p

was Sie brauchen, ist zu tun #ulimit -c unlimited

und überprüfen #ulimit -a

und bestätigen, wenn Kerndateigröße richtig eingestellt ist. Sie werden den Kern dann als core.pid erhalten.

1

Mein Verständnis ist, dass die Verwendung von Ulimit nicht permanent ist, d. H., Wenn Sie neu booten, dann geht das Limit zurück auf 0. Um unbegrenzt dauerhaft zu haben, müssen Sie /etc/security/limits.conf ändern. Ändern Sie/etc/sysctl.conf ähnlich für Kernmuster usw.