orm@doc-tcpip.org | Erstellt: März 2002 - Letzte Modifikation: Juli 2005 |
Wenn eine ausführbare Datei, also ein Programm, bei der Ausführung abstürzt, dann schreibt es den Inhalt seines Arbeitsspeichers in ein sogenanntes Core-File. Dieses File kann dann mit einem Debugger und ein paar weiteren Kommandos ausgewertet werden.
Unter AIX wird in so einem Fall ein Eintrag in den Error-Report geschrieben. Diesen Eintrag findet man leicht in der Ausgabe von errpt -a | pg, der Label ist CORE_DUMP. Ganz am Ende des Eintrages findet sich meist das Programm, was den Core geworfen hat.
Mit normalen Einstellungen des Systemes erhält man ein vereinfachtes Core-File (es fehlt z.B. die Symbol-Tabelle, und es ist nur auf der Maschine auswertbar). Ein sogenanntes Full-Core muß man per Smitty einstellen: System Environment ==> Change / Show characteristics of operating system ==> Enable full CORE dump = true. Außerdem muß für den User root und jeden User, der das Programm laufen läßt, die Systemlimits angepasst werden. Das geschieht in der /etc/security/limits:
fsize = -1 fsize_hard = -1 core = -1 core_hard = -1
Ein Core-File findet man mit dem find-Kommando:
find / -name core
Mit dem lquerypv-Kommando kann man nun das Core-File lesen; dabei
gibt man an, wo man starten möchte, und wieviele Byte man lesen möchte.
Das Format eines Core-Files ist festgelegt, folgendes Kommando zeigt
das Programm, welches das Core-File geschrieben hat:
lquerypv -h core 6b0 64
Hier war bekannt, daß der Name des Programms nach Zeile 6b0 kommt. Oft
kennt man das Format nicht, daher hilft man sich mit
lquerypv -h core 000 1024 |more
Ein Beispiel:
2:root@drossel1:/ADSM/scripts/bin # find / -name core /ADSM/scripts/bin/core 2:root@drossel1:/ADSM/scripts/bin # lquerypv -h core 0 1024 |more .... 00000500 00000001 00000000 00000000 00000003 |................| 00000510 F10000E0 04B1F8A0 00000000 00000000 |................| 00000520 00120000 64736D63 00000000 00000000 |....dsmc........| 00000530 00000000 00000000 00000000 00000000 |................| 00000540 00000000 00000000 00000000 02B42400 |..............$.| ....Jetzt kann man im dbx (der AIX Debugger) das Core-File gegen das entsprechende Binary (also das Programm) öffnen und erfährt so, welcher System-Call das Programm zum Absturz gebracht hat.
2:root@drossel1:/ADSM/scripts/bin # whence dsmc /usr/bin/dsmc 2:root@drossel1:/ADSM/scripts/bin # dbx /usr/bin/dsmc core Type 'help' for help. [using memory image in core] reading symbolic information ... IOT/Abort trap in pthread_kill at 0x9000000004e02ac ($t1) 0x9000000004e02ac (pthread_kill+0x9c) e8410028 ld r2,0x28(r1) (dbx)
Man kann eine neue System-Variable (CORE_NAMING) auf yes setzen; dann wird das Core File eines Programmes mit einem Zeit- und Datums-Stempel versehen. Mit dem snapcore Kommando kann man ein Core-File mit allen nötigen weiteren Files (Libraries, Executable etc.) in ein komprimiertes pax-Archiv packen und dann versenden.
[ Allgemein | UNIX | AIX | TCP-IP | TCP | ROUTING | DNS | NTP | NFS | FreeBSD | Linux | RPi | SMTP | Tracing | GPS | LW ]
Copyright 2001-2021 by Orm Hager - Es gilt die GPL