orm@doc-tcpip.org

Erstellt: März 2002 - Letzte Modifikation: Juli 2005

[ Main | Local ]


Analyse eines Core-Files


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.


[ Main | Local ]

[ Allgemein | UNIX | AIX | TCP-IP | TCP | ROUTING | DNS | NTP | NFS | FreeBSD | Linux | SMTP | Tracing | GPS ]

Copyright 2001-2014 by Orm Hager - Es gilt die GPL
Feedback bitte an: Orm Hager (orm@doc-tcpip.org )