Hlavní navigace

ABRT automaticky nahlásí chyby za vás

2. 9. 2009
Doba čtení: 3 minuty

Sdílet

S hlášením chyb v software vám pomůže projekt, který se nyní „peče“ v Red Hatu: Automatic Bug Reporting Tool, zkráceně ABRT. Původní myšlenkou projektu bylo umožnit začátečníkům jednoduchým způsobem hlásit chyby v aplikacích, ale díky propracovanému systému pluginů zvládne tento nástroj nyní daleko víc.

Základní scénář (přednastavená konfigurace, aktivní po instalaci) vypadá následovně: když se aplikace nestandardně ukončí, v systémové liště se objeví informace o pádu:

ABRT 1

Pokud kliknete na tuto ikonku, objeví se okno zobrazující všechny uložené pády, z něhož je možno kliknutím na „report“ nahlásit chybu do Bugzilly.

ABRT 2
ABRT 3
ABRT 4

Hlášení chyby obsahuje backtrace, tedy informace, v které části programu k pádu došlo.

Takže máme za sebou jednoduchý popis standardní konfigurace a můžeme se podívat „pod kapotu“, co dalšího tento nástroj umí:

Abrt „odchytává“ pády, čili nestandardní ukončení, aplikací. V okamžiku pádu se probudí ABRT daemon… a něco provede. Takto obecně jsem to napsal proto, že co se konkrétně provede, závisí na konfiguraci v souboru abrt.conf a v konfiguraci jednotlivých pluginů.

V „centrálním“ konfiguračním souboru se specifikuje, které z pluginů a v jakém případě se spustí. Základní rozlišení je na kompilované programy (napsané v C/C++) a programy v Pythonu. Díky modulární architektuře „analyzerů“ bude tento seznam rozšířen třeba i na Javu nebo další typy programů. Dále je možno specifikovat konkrétní balík: které pluginy spustit (a s jakými parametry) v okamžiku, kdy program z daného balíku spadne. Dále je zde sekce [cron], kde můžete naplánovat spuštění nějakého pluginu v konkrétním čase či časovém intervalu.

Nyní již přistoupíme ke konkrétnímu popisu pluginů:

  • Bugzilla plugin jste již viděli: specifikujete mu přihlašovací údaje do Bugzilly a on pro daný balíček vyplní bug report.
  • podobný je Kerneloops plugin, který vyplní chybovou zprávu v kerneloops trackeru.
  • Logger loguje data o pádu do souboru.
  • Mailx plugin pošle mail (se zadaným předmětem a adresou), pokud je spuštěn.
  • FileTransfer plugin pošle data o pádu po síti (FTP, SCP a tak dále) na jiný počítač.
  • nejobecnější RunApp plugin spustí libovolnou externí aplikaci, lze specifikovat příkazový řádek a výstup do souboru.
  • je možno vytvářet vlastní pluginy, viz soubor PLUGINS-HOWTO v balíku ABRT.

Možná vás při popisu Bugzilla pluginu napadlo, co se stane, když jeden a tentýž program spadne stejným způsobem znovu: bude se generovat pokaždé nové hlášení o chybě? Bohudík nebude: ABRT vždy u chyby spočítá její hash a poté porovnává tento hash s předchozími položkami v databázi: chyba se pak neukládá dvakrát znovu.

Stejně tak pokud je položka s daným hashem v Bugzille již vyplněna (hash píšeme na Bugzilla whiteboard), místo nového nahlášení chyby se pouze přidá komentář „+1“.

Další netriviální věcí, na niž je třeba dát pozor, jsou „konkurenční“ odchytávače chyb, například BugBuddy pro GNOME aplikace: věc se má tak, že pokud jsou aktivní, tak se „ke slovu“ dostanou dříve než ABRT. To je spíše vlastnost než chyba, protože tyto aplikace mohou nahlásit detailnější informace o chybě „svých“ programů. Pokud je vypneme, přijde ke slovu – jako záchranná síť o patro níž – ABRT.

Zmiňme ještě fakt, že ABRT se „stará“ pouze o balíčky: pokud máte v systému nějaký program zkompilovaný „na divoko“ přímo ze zdrojových kódů, ABRT od něj dá ruce pryč. Opět nejde o chybu, ale o vlastnost: takový program by se těžko reportoval do Bugzilly dané distribuce…

Instalace

distribuci Fedora 11 je ABRT již přítomen v repositářích, stačí zadat

$ yum install abrt-desktop

a máte základní nastavení,

$ yum install abrt*

pro všechny pluginy. K dispozici jsou i manuálové stránky s podrobnější dokumentací.

Pokud chcete sledovat nejnovější vývoj, zdrojové kódy jsou k dispozici v GIT repositáři:

$ git clone git://git.fedorahosted.org/git/abrt.git

Ještě bych rád uvedl nějaký příklad konfigurace /etc/abrt/abrt.conf, abyste viděli, jak nastavení „vypadají“:

skoleni

[common]
Blacklist=firefox
EnabledPlugins=SQLite3,CCpp,Logger,Bugzilla,Python,Mailx,KerneloopsScanner

[AnalyzersActionsAndReporters]
CCpp = Bugzilla
CCpp:httpd = Mailx("[abrt] Apache crashed")

[cron]
10 = KerneloopsScanner

Popis konfigurace řádek po řádku:

  1. pády Firefoxu ignorujeme.
  2. další řádek obsahuje všechny „povolené“ pluginy (ty, které ABRT při startu načte).
  3. při pádu v kompilované aplikaci se spustí Bugzilla plugin.
  4. při pádu v balíku httpd se pošle mail na adresu. definovanou v konfiguračním souboru Mailx pluginu.
  5. každých deset sekund se zjišťuje, zda proběhl nějaký kernel oops.

Na závěr vám přejeme, ať vaše aplikace padají co nejméně, k čemuž snad přispěje i nahlášení chyb tímto novým, automatizovaným způsobem.