Sie sind nicht angemeldet.

[Tipps & Tricks] Core dump file Analyse

Lieber Besucher, herzlich willkommen bei: GentooForum.de. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

1

18.08.2007, 10:27

Core dump file Analyse

Einleitung

Manchmal hat man sich die neueste must-have Applikation gemerged und beim Starten desselbigen "kackt" das Teil furchtbar weg.

Googeln, Bohren der Forums-Kollegen, bugzilla-grasen, USE-Flags Ratespiel, CFLAGS-switching ... nichts führt zum Ziel. Die Applikation will einfach nicht auf deiner Maschine. Aus. Das Teil schmiert einfach ab und weg.

Ein mögl. Ausweg, dem Fehlverhalten auf die Schliche zu kommen ist die Analyse von core dumps.

Was sind core dumps?

Ein core dump ist eine Datei, ein File, welches der Kernel im aktuellen laufenden Verzeichnis hinterlegt im Fall das eine Applikation sich nicht ordnungsgemäß beendet.

In einem core dump sind allerlei Sachen verzeichnet: stacktrace, symbole, memory, etc. etc.

Gibt man nun ein executable an und das zugehörige core file, dann kann man in einem Debugger ziemlich genau feststellen, warum der Kernel eine Applikation ziemlich unsanft aus dem Speicher geschossen hat.

Werden immer core dumps erstellt?

NEIN. Warum?

Ganz einfach: zunächst sind core dumps in der Regel recht groß. Hat man eine Applikation, welche regelmäßig abschmiert, müllt man sich zeimlich schnell diePlatte voll.

Zweitens befindet sich in einem core dump auch der Memory-Auszug des getöteten Prozesses und der kann sensible Informationen beinhalten, wie Passwörter, TANs, etc. Man braucht dann kein Informatik-Studium dazu um diese Informationen aus einem core dump file herauszuholen.

Ok. Wie komme ich nun zu einem core dump file?

Grundsätzlich guckt man mal, ob die Prozessumgebung das überhaupt zuläßt. Dazu klopft man mal

Quellcode

1
$ man core
ein und checkt, ob die Randbedingungen erfüllt sind.

Dazu zählen:
- Der Prozess muß Schreibrechte im aktuellen Verzeichnis haben
- Es muß genug Platz auf der Platte sein
- Der Prozess darf nicht das setuid haben (ok, da gibt es noch einige Kniffe dazu ... lesen!)
- ...

Wenn all dies erfüllt ist, gibt es noch eine "magische" Randbedingung: das ulimit für core dumps darf nicht 0 sein. ulimit legt die oberen Grenzen für (File-)Operationen fest.

Quellcode

1
2
$ ulimit -c
0
besagt, das keine core dumps erstellt werden, auch dann, wenn die Bedingungen in "man core" erfüllt sind.

Quellcode

1
$ ulimit -c unlimited
erstellt core dumps beliebiger Größe.

Was brauche ich noch zur Analyse?

Zunächst mal ist klarzustellen, das selten Executables Symbol-Informationen beinhalten und nicht darauf ausgelegt sind, je debuged zu werden.

Um das zu erreichen, ist mal das Studium von http://www.gentoo.org/proj/en/qa/backtraces.xml zu empfehlen.

Dann empfehle ich hier mal dieses Setting:

Quellcode

1
# FEATURES+="nostrip" USE+="debug" emerge <application-which-crashes>
Außerdem dreht die CFLAGS Optimierungen ab. Kein "-O2", -"O3" oder sowas. Diese Optimierungen stellen eine Menge mit dem Erzeugten Code an, welche die Analyse sehr erschweren.

Im Einzelnen:

- FEATURES+="nostrip": das verhindert, das Symbolinformation aus den Executables und Libraries entfernt wird. Für das Ausführen der Programme sind diese nicht notwendig und das Entfernen derselben spart Platz. ABER: Analyse-Werkzeuge (wie bsp. "nm") tun sich dann sehr schwer ... und manchmal verunmöglicht das deren Einsatz überhaupt.

- USE+="debug": bringt den gcc dazu, noch zusätzliche Debug-Informationen ("-ggdb") reinzukompilieren.

... und?

Yep! Noch ein Tip. Standardmäßig wird einfach das File "core" angelegt. Das ist an sich ok, aber manchmal etwas irrig, wenn nämlich App "xyz" ausgeführt wird, welche aber App "abc" zum crashen bringt ...

Damit der core dump Filename noch etwas ausführlicher wird, kann man den Kernel mitgeben, wie man es möchte:

Quellcode

1
# echo "core.%e.%p" > /proc/sys/kernel/core_pattern
legt core files an, welche den Namen der gecrashten Application beinhalten, sowie deren PID.

Jetzt habe ich ein core file! Hurra! Bloß, ... wat nu?

Analysieren! Man holt sich den gdb, bzw. wenn man es grafisch haben möchte, den kdbg, lädt das gecrashte Executable und das core file ... und ab!

Dazu ist es unumgänglich, das man etwas von C/C++ versteht sowie die - zugegeben mögl. etwas "hantige" - Benutzung der Tools versteht.

Ein etwas halbwegs erfahrener Progie kann jedenfalls mit diesen Teilen sehr exakt feststellen, was die App zum crashen gebracht hat und *damit* wird eine Lösung des Problems schon wesentlich klarer.
http://www.dyle.org
IM-Account (Jabber!) sind auf meiner HP ...
There is no place like /home

http://www.gentooforum.de
http://www.gentoofreunde.org

<div>how to annoy a web developer?</span>

2

18.08.2007, 10:39

Ein Beispiel ...

Ok. Ein Beispiel: dieses Programm kackt weg:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>

void foo() {
        int* x = NULL;
        (*x) = 1;
}

int main(int argc, char** argv) {
        int y = 2;
        foo();
        return 0;
}

Spätestens nach "C in 21 Tagen" wird wohl jeder sagen: "Na no na! Die Zuweisung (*x) = 1; ist Müll!". Klar. Aber das wollen wir mal debuggen!

Das Programm oben nenne ich mal Einfach halber "t.c". So! Jetzt:

Quellcode

1
2
3
$ gcc -g -o t t.c
$ ./t
Segmentation fault

Noch kein core dump. Ok.

Quellcode

1
2
3
$ su -l
Password: 
# echo "core.%e.%p" > core_pattern
(bleibt in der su Sitzung, sonst stellt der Kernel das wieder zurück) und ein

Quellcode

1
$ ulimit -c unlimited

Noch ein Lauf:

Quellcode

1
2
$ ./t
Segmentation fault (core dumped)
TATA! "(core dumped)" ist das Ziel! Gucken wir in das Verzeichnis:

Quellcode

1
2
$ ls
core.t.9303  t  t.c
Da: "core.t.9303" ist der core dump.

Jetzt den Debugger eurer Wahl und ... screenshot.

Der Screenshot ist mit kdbg gemacht:
1. Zuerst "Open Executable" --> das ist "t"
2. Dann "Core Dump" --> das ist "core.t.9303"
http://www.dyle.org
IM-Account (Jabber!) sind auf meiner HP ...
There is no place like /home

http://www.gentooforum.de
http://www.gentoofreunde.org

<div>how to annoy a web developer?</span>

3

08.03.2011, 22:13

Core Dump oder die Ominöden core.12345 -Dateien.

Also, ich bin richtig Verwundert. Seit drei Tagen Google ich mich von Forum zu Forum registriere mich in der Erwartung das jemand mein Problem erkennt und muss immerwieder Feststellen, niemand hatte in den sogenannten Fachforen jemals etwas von core -Dump -Dateien gehört, ich übrigens auch nicht.
Bis ich endlich auf dieses Forum stieß. :-) Und dann wird hier auch noch richtig fein säuberlich und Hochprofessionell alles beantwortet oder beschrieben, finde ich Klasse, auch wenn ich nicht mal die hälfte davon verstanden habe was ich gelesen hatte, aber trotzdem große Klasse. :-)
So nun zu meinem Problem, ich betreibe für eine kleine Fangemeinde einen Server (Ich dachte, das ich das mit fast 60 schaffe :thumbdown: ) Die Fangemeinde ist das CMS-System e107 und für genau dieser Gemeinde hoste ich für Interessenten kostenlos Domains mit dem e107, ist mein Hobby geworden. (Wie blöd ist das denn?? Kenne die Frage!) Andere haben eine teure Eisenbahn im Keller und ich hoste nun mal.
Seit drei Tagen tumeln sich auf fast alen Domains Dateien mit einer enormen Bytezahl. Diese nennen sich in der Regel core.13456, core.13876 usw. Dachte das die Domains gehackt wurden und irgendein Schadscript sein unwesen treibt. Nicht mal mein Serveranbieter wuste was das für Dateien sind und konnte mir nicht helfen. (Ja würde ich ja wechseln :huh: )
Nun mein Problem, ich vermute, das das cms -System irgendeinen Fehler besitzt und da alle Domains das Selbe CMS- System nutzen sind auch deshalb überall die Ominösen Dateien zu finden. (Oder Irre ich mich und es hat überhaupt nichts mit dem cms -System zu tun :huh: ?)
Da ich noch über keinerlei Erfahrung mit Server, Linux, Apache usw. habe (Bin blutiger Anfänger) suche ich Hilfe. (Ich weiß, dann sollte mann sich keinen Server zulegen :thumbdown: )
Kann mir jemand behilflich sein, das Script auszuwerten damit der Fehler abgestellt werden kann? Währe ja echt SUPER.
Und wie stell ich die DUMP Funktion ab? (Sollte man wohl nicht abstellen?) Wenn ich den Fehler kenne und diesen beseitigen könnte, kann die Dumpfunktion ja eingeschaltet bleiben. Im Moment müllt diese Funktion meinen Server dicht.
Serverdaten: Server:
Apache; PHP Version: 5.2.6-1+lenny3; mySQL: 5.0.51a-24+lenny1; System: LINUX-Debian; Admin-Tool: Confixx

Ich danke schonim Vorraus das einem alten Mann geholfen wird. :-)

4

09.03.2011, 00:32

Hallo Goslarer1 und herzlich willkommen im unseren Forum.

Wir beschäftigen uns hauptsächlich mit der Linux-Distribution Gentoo. Viele kennen sich zwar auch mit Debian aus, jedoch ist es nicht unser Schwerpunkt.

Die Anwendung "e107" ist weder im Gentoo-Portage noch in einem Gentoo-Overlay drin. Dh. diese Anwendung ist bei uns nicht üblich.
Was macht diese Software besonderes? Eventuell gibt es eine Alternative, die wir Dir empfehlen könnten.

Du kannst es versuchen bei uns im Bereich "Gentoo als Server / Web/Application Server" Deine Frage nochmals stellen. Hierzu solltest Du so ein Core-Dump (falls nicht Datenschutz-kritisch) hochladen.

Das gilt übrigens auch für die Cross-Postings, wie zB. http://www.selfphp.info/forum/showthread.php?p=140455
Es gilt also auch bei uns: Je genauer Du das Problem beschreibst und je mehr Du uns an Infos gibst, desto eher wird Dir geholfen.
Wie Du gesehen hast, habe ich etwas rumgesucht. Dabei habe ich http://www.webhostingtalk.com/showthread.php?t=704042 gefunden. So ein GDB Trace wäre auch nicht verkehrt.
Auch wenn Open-Source kostenlos ist, ist sie nicht umsonst. Dein Preis ist Dein Engagement und Mitarbeit an OS-Projekten.
Wenn Du keinen Preis bezahlen willst, bist Du die Ware. Und das ist nicht Open Source, geschweigedenn frei.