Kerndateiformat

Zweck

Enthält ein Image eines Prozesses zum Zeitpunkt eines Fehlers.

Beschreibung

Im aktuellen Verzeichnis wird eine Datei .core erstellt, wenn verschiedene Fehler auftreten. Fehler wie Verstöße gegen Speicheradressen, unzulässige Anweisungen, Busfehler und vom Benutzer generierte Beendigungssignale führen in der Regel zu dieser Kernspeicherauszug. Die erstellte Datei Kern enthält ein Speicherimage des beendeten Prozesses. Wenn es sich bei dem fehlerhaften Prozess um einen Multithread-Prozess handelt und die aktuelle Kern Größe ULimit kleiner ist als der für den Speicherauszug des Datenabschnitts erforderliche Wert, wird nur für den fehlerhaften Thread-Stackbereich ein Speicherauszug aus dem Datenabschnitt erstellt.
Hinweis: Die Kernspeicherauszugsdatei kann mit dem Befehl chcore einen eindeutigen Namen erhalten. Das Standardverhalten entspricht dem in früheren Versionen des Betriebssystems AIX® .

Der vom Prozess zugeordnete gemeinsam genutzte Speicher kann optional auch aus der Kerndatei ausgeschlossen werden. Diese Daten werden nur übergangen, wenn die Umgebungsvariable CORE_NOSHM exportiert wird. Standardmäßig wird der gesamte gemeinsam genutzte Speicher in die Kerndatei eingeschlossen. Die Variable CORE_NOSHM kann auf einen beliebigen Wert gesetzt werden.

Die eindeutige Benennung von Kerndateien wird nur aktiviert, wenn die Umgebungsvariable CORE_NAMING exportiert wird. Der Standardname lautet core wie in früheren Releases. Der Wert der Variablen sollte auf truegesetzt werden.

Der Inhalt eines Kernspeicherauszugs ist in der Datei Kern wie folgt sequenziell organisiert:

Element Beschreibung
Core-Header Definiert Basisinformationen zum Kernspeicherauszug und enthält Offsets, die den Rest der Kernspeicherauszugsinformationen lokalisieren.
Ldinfo -Strukturen Definiert Ladeprogramminformationen.
mstsave -Strukturen Definiert Statusinformationen für Kernel-Threads. Da die Struktur des fehlerhaften Threads mstsave direkt im Kernheader gespeichert wird, werden hier zusätzliche Strukturen nur für Multithread-Programme gespeichert.
Standardbenutzerstack Enthält eine Kopie des Benutzerstacks zum Zeitpunkt des Kernspeicherauszugs.
Standarddatenbereich (Optional) Enthält den Benutzerdatenabschnitt.
Speicherzugeordnete Regionen (Optional) Enthält die anonym zugeordneten Regionen.
VM-Info -Strukturen (Optional) Enthält Offset-und Größeninformationen für speicherzugeordnete Regionen.

Standardmäßig sind die Benutzerdaten anonym zugeordnete Regionen und VM-Info -Strukturen nicht in einem Kernspeicherauszug enthalten. Dieser partielle Kernspeicherauszug enthält den aktuellen Prozessstack, den Thread-Stack, die mstsave -Threadstrukturen, die Benutzerstruktur und den Status der Register zum Zeitpunkt des Fehlers. Ein partieller Kernspeicherauszug enthält genügend Informationen für ein Stack-Traceback. Die Größe eines Kernspeicherauszugs kann auch durch die Subroutine Setrlimit begrenzt werden.

Um einen vollständigen Kernspeicherauszug zu aktivieren, setzen Sie das Flag SA_FULLDUMP in der Subroutine Berechtigungsaktion für das Signal, das einen vollständigen Kernspeicherauszug generieren soll. Wenn dieses Flag gesetzt wird, wenn der Kernspeicherauszug erstellt wird, wird der Datenabschnitt, anonym zugeordnete Regionen und VM-Info -Strukturen in den Kernspeicherauszug eingeschlossen.

Für Kerndateien wird wie folgt ein Speicherauszug erstellt:
  • Alle gedumpten Kerne befinden sich im Kontext des aktiven Prozesses. Sie werden mit einem Eigner und einer Gruppe erstellt, die der effektiven Benutzer-ID (UID) und Gruppen-ID (GID) des Prozesses entsprechen. Wenn dieses UID/GID-Paar keine Berechtigung zum Schreiben in das Zielverzeichnis hat, das gemäß den Standardkernpfadprozeduren bestimmt wird, wird kein Speicherauszug der Kerndatei erstellt.
  • Wenn die reale Benutzer-ID (RUID) root ist, kann für die Kerndatei immer ein Speicherauszug erstellt werden, jedoch im Modus 0600.
  • Wenn die effektive Benutzer-ID (EUID) mit der realen Benutzer-ID (RUID) übereinstimmt und die effektive Gruppen-ID (EGID) mit einer Gruppe in der Gruppenliste des Berechtigungsnachweises übereinstimmt, wird ein Speicherauszug der Kerndatei mit den Berechtigungen 0600 erstellt.
  • Wenn die EUID mit der RUID übereinstimmt, die EGID jedoch mit keiner Gruppe in der Gruppenliste des Berechtigungsnachweises übereinstimmt, kann kein Speicherauszug der Kerndatei erstellt werden. Der effektive Benutzer kann keine Daten anzeigen, auf die er keinen Zugriff hat.
  • Wenn die EUID nicht mit der RUID übereinstimmt, kann ein Speicherauszug der Kerndatei erstellt werden, wenn Sie mit dem Befehl Syscorepath ein Kernverzeichnis festgelegt haben. Dadurch wird vermieden, dass die Kerndatei so in das aktuelle Arbeitsverzeichnis oder in ein benutzerspezifisches Kernverzeichnis geschrieben wird, dass Sie die Kerndatei nicht entfernen können. Für den Kern wird ein Speicherauszug mit dem Modus 0600 erstellt. Wenn Sie den Befehl Syscorepath nicht zum Festlegen eines Kernverzeichnisses verwendet haben, wird kein Kernspeicherauszug erstellt.

Das Format des Kernheaders wird durch die Struktur core_dump (in der Headerdatei core.h ) definiert, die wie folgt organisiert ist:

Element Feldname Beschreibung
char C_signo Die Nummer des Signals, das den Fehler verursacht hat.
char c_flag Ein Bitfeld, das den Kernspeicherauszugstyp beschreibt. Die Bits haben folgende Bedeutung:
VOLLSTÄNDIGER KERN
Kern enthält die Datenabschnitte (0x01)
CORE_VERSION_1
Kern wurde von AIX Version 4 oder höher generiert (0x02)
MSTS_GÜLTIG
core enthält mstsave-Strukturen (0x04)
KORE_BIGDATEN
Kern enthält Big Data (0x08)
UBLOCK_XX_ENCODE_CASE_ONE gültig
core enthält die u_block-Struktur (0x10)
USTACK_GÜLTIG
core enthält den Benutzerstack (0x20)
LE_VALID
Kern enthält mindestens ein Modul (0x40)
KORE_TRUNC
Kern wurde abgeschnitten (0x80)
Uschort C_einträge Die Anzahl der Kernspeicherauszugsmodule.
Struktur ld_info * C_tab Der Offset zum Anfang der Kerntabelle.
caddr_t C_stack Der Offset zum Anfang des Benutzerstacks.
int C-Größe Die Größe des Benutzerstacks.
Struktur mstsave C_mst Eine Kopie der fehlerhaften MST
Struct-Benutzer C U Eine Kopie der Benutzerstruktur
int C_nmsts Die Anzahl der mstsave -Strukturen, auf die durch diec_mstsFeld
Struktur mstsave * C_msts Offset zu den mstsave -Strukturen der anderen Threads
int C-Datengröße Die Größe der Datenregion.
caddr_t C_data Offset zu Benutzerdaten
int VM-Regionen Die Anzahl der anonym zugeordneten Regionen.
Struktur vm_info * C_vmm Der Offset zum Anfang der Tabelle vm_info.