Linux-Arbeitsgruppe Up Right Aspekte des Linux-Kerns
Linux-Arbeitsgruppe

Hintergründe von Coredump

von Rudolf Weber

Was ist ein coredump und wann wird er geworfen ?

Bei Programmierfehleren kommt es vor, daß ein Prozeß auf Seiten zugreifen versucht, die auserhalb seines Speicherbereiches liegen. Das Betriebssystem merkt das und muß den Prozeß terminieren.

Damit man das Phänomen untersuchen kann, kann das Betriebssystem einen Speicherabzug machen, traditionell "core" genannt, von Kernspeicher, was das alte Wort für den RAM-Hauptspeicher ist.

SIGSEGV
Ungültige Adresse (vgl OBEN)
SIGQUIT
kann von Administrator geschickt werden, um einen Speicherabzug zu bekommen
SIGBUS
ungültige Speicherausrichtung bei Integerarithmetik

Core-dump im Linux 2.4-Kern

asm/user.h: Corefile Format trad-core' bfd

/arch/i386/mm/fault.c:do_page_fault hier wird er erkannt und mit force_sig_info(SIGSEGV,&info,tsk); das Signal ausgelöst.

Das ausschreiben findet in: /usr/src/linux-2.4.8/fs/binfmt_elf.c;int elf_core_dump(long signr, struct pt_regs * regs, struct file * file) statt

linux/binfmts.h:struct linux_binfmt::core_dump(long signr, struct pt_regs * regs, struct file * file);

fs/exec.c:do_coredump(...) initiiert das coredump

arch/i386/kernel/signal.c: do_signal veranlasst das do_coredump

Folgender patch liefert ausführlichere coredump-namen der Form core.pid.progname.
Damit können nun Prozesse mit gleichem Namen einen core schmeissen.

Es wird nun im syslog gemeldet, daß ein core geschmiessen wurde, bzw. falls ein core kommen sollte und dies Gründe dagegen gibt, werden die auch auf dem Syslog gemeldet.

Hier also der coredump.patch.

Man sollte so ein Feature/Merkmal zur Laufzeit ein- und abschalten können...

Weitere Ideen

Core erzeugen

gcore(1) auf BSD-Unix macht das.

Der GNU Debugger hat ein Befehl gcore um ein Corefile von einem laufenden Prozess zu erzeugen.


Linux-User Group Oberschwaben Rudolf Weber