2013-01-07 4 views
5

Wir haben einen Ubuntu-Server mit aktiviertem Apport wie gezeigt bereitgestellt.So ändern Sie das Standardverhalten von apport für nicht gepackte Anwendungsabstürze?

~$ cat /proc/sys/kernel/core_pattern 
|/usr/share/apport/apport %p %s %c 

Leider ist das Verhalten von apport im Umgang mit nicht gepackten Anwendungsabstürzen nicht ganz unser Geschmack. apport erzeugt "Core" -Dateien (vorausgesetzt, dass ulimit -c entsprechend eingestellt ist) in diesen Szenarien im Arbeitsverzeichnis. Zum Beispiel aus den Apport logs,

ERROR: apport (pid 10117) Tue Jan 8 08:56:25 2013: executable: /home/jess/a.out (command line "./a.out") 
ERROR: apport (pid 10117) Tue Jan 8 08:56:25 2013: executable does not belong to a package, ignoring 
ERROR: apport (pid 10117) Tue Jan 8 08:56:25 2013: writing core dump to /home/jess/core (limit: 18889465931478580853760) 

Frustrierend, wenn eine Systemdatei ist dort wird es nicht überschrieben werden. Wenn wir zum Beispiel eine App testen und vergessen, eine alte Core-Datei aus dem Arbeitsverzeichnis zu löschen, stürzt die App während des Tests ab, und wir sehen keine neue Core-Datei. Selbst wenn es überschrieben würde, wäre dies vielleicht auch nicht ideal, da wir dann den alten Kern verlieren. Im Idealfall möchten wir Ihnen über ein Argument sagen, dass für nicht verpackte Anwendungsfälle eine Kerndatei mit einem Dateinamen generiert werden soll, der nach einem bestimmten Muster formatiert ist (wie im core_pattern) Dateispezifikation) ... gibt es eine Möglichkeit, dies zu tun, oder etwas Äquivalentes?

+0

Mögliches Duplikat von [Core-Dump-Datei wird nicht generiert] (http://stackoverflow.com/questions/7732983/core-dump-file-is-not-generated) – conradkdotcom

Antwort

0

Wenn es sich um eine unverpackte Binärdatei handelt, wird apport immer noch /proc/sys/kernel/core_uses_pid einhalten, damit Sie Ihre Chancen erhöhen können, die richtige Kerndatei zu erhalten.

Es wird angenommen, dass die /proc/sys/kernel/core_pattern einen Verweis auf apport selbst hat, es gibt also nichts, auf das in einem solchen Fall zurückgegriffen werden könnte.

Sie können den Code im Skript /usr/share/apport/apport sehen, das vom Kernel-Kernmuster mit apport aufgerufen wird.

Eine naheliegende Alternative wäre, ein neues Python-Skript zu erstellen, genau wie dieses, aber mit Modifikationen in der write_user_coredump-Funktion, und hakt es dann durch das Kernel-Kernmuster sysctl auf.

1

Eine weitere Alternative ist die Verwendung von Apport zur Behandlung von Abstürzen. Es wird den Core-Dump zusammen mit einer Tonne anderen nützlichen Kontext über den Absturz speichern. Fügen Sie die folgenden Zeilen zu ~/.config/apport/settings (erstellen Sie es, wenn es nicht vorhanden ist):

[main] 
unpackaged=true 

stürzt nun als Apport .crash Dateien in /var/crash angezeigt. Sie können sie mit apport-unpack entpacken.

Eine Einschränkung: es scheint, dass Apport immer noch versucht, diese Abstürze auf den Ubuntu-Bug-Tracker hochzuladen, wenn der Benutzer das Kontrollkästchen Fehlerbericht senden deaktiviert lässt; Dies kann ein Problem sein, wenn Sie an proprietärem Code usw. arbeiten. Ich bin auf der Suche nach weiteren Informationen dazu; Es scheint, dass /etc/apport/crashdb.conf steuern kann, wohin die Absturzberichte gesendet werden.

Verwandte Themen