GNU/Linux >> Znalost Linux >  >> Linux

RR - Softwarový debugger pro nahrávání a přehrávání

V průběhu let jsem psal obšírně o tom, jak řešit problémy související se softwarem ve světě IT obecně a v Linuxu zvláště. Koneckonců, tohle je můj chléb a máslo už dlouho a stále mě docela baví umění řešit problémy. Jedním z témat, kterým jsem se intenzivně zabýval, je gdb, základní softwarový debugger. Jediný problém je - musíte innit, abyste vyhráli.

Co tím myslím - gdb je vynikající, pokud dokážete reprodukovat své problémy. Ale pokud spouštíte software v produkčním nastavení, možná nebudete mít ten luxus, abyste spouštěli problémy znovu a znovu. Schopnost zachytit a poté přehrát chyby je velkým přínosem a přichází ve formě RR, nástroje určeného k ladění zaznamenaných spouštění softwaru přesným, deterministickým způsobem. Uvidíme, co dá.

Připraveno, stabilní, nastaveno

V podstatě je RR gdb a gdb je RR. Myšlenka je jednoduchá a provedení elegantní. Spustíte svůj nástroj pomocí rr, zachytíte provedení (a selhání) a poté záznam přehrajete, kolikrát chcete, mimo produkční prostředí. Kromě toho, pokud existují nepolapitelné problémy, můžete být schopni zachytit opakovatelný scénář, který vám umožní rychleji zjistit hlavní příčinu a opravit problém.

Nainstaloval jsem a nakonfiguroval jsem RR ve Fedoře 32. Docela jednoduché. Nyní provedení vyžaduje určitou pozornost k detailům. Pokud spustíte program jako běžný uživatel, může se zobrazit varování, že RR ve skutečnosti nemůže zachytit události privilegovaného jádra. Můžete to změnit a pak nepotřebujete sudo. Podobné tomu, co jsme viděli u výkonu. Milé.

rr record ./seg
rr potřebuje /proc/sys/kernel/perf_event_paranoid <=1, ale je to 2.
Změňte to na 1 nebo použijte 'rr record -n' (pomalé).
Zvažte umístění 'kernel.perf_event_paranoid =1' do /etc/sysctl.conf

Existuje mnoho způsobů, jak to můžete změnit. Zadejte hodnotu do /proc, použijte sysctl -w k zápisu hodnoty, ručně upravte soubor /etc/sysctl.conf a poté znovu načtěte konfiguraci. Ať už zvolíte kterýkoli způsob, budete mít lepší výkon a schopnost sledovat všechny potřebné události.

sudo sysctl -w kernel.perf_event_paranoid=1

Příklad Segfault

Abych viděl, jak praktické a užitečné je RR, rozhodl jsem se použít stejný příklad segfault z tutoriálu gdb. V podstatě smyčka s malloc(), která povede k chybě segmentace:

#include
#include

main()
{
int *ukazatel;
int i;
ukazatel =malloc(sizeof(int));
for (i =0; 1; i++)
{
ukazatel[i]=i;
printf("ukazatel[%d] =%d\n", i, ukazatel[i]);
}
return(0);
}

gcc -g seg.c -o seg
seg.c:4:1:varování:výchozí typ návratu je ‚int‘ [-Wimplicit-int]
4 | main()
| ^~~~

Záznam RR a přehrání RR

Dvě hlavní funkce, které RR používá – záznam a přehrávání.

rr záznam ./seg
...
ukazatel[33621] =33621
ukazatel[33622] =33622
ukazatel[33623] =33623
Chyba segmentace (jádro vyhozené)

Upozorňujeme, že skutečné provedení bude pomalejší než obvykle. To znamená, že pokud máte časově závislé problémy, RR nemusí být užitečné. Docela podobné tomu, co jsme viděli u strace. Chcete deterministické problémy, které lze spolehlivě replikovat (za správných podmínek).

Každopádně, jakmile budeme mít problém zaznamenaný, můžeme ho přehrát:

rr replay

Při prvním načtení RR mě to varovalo, že symboly ladění nejsou k dispozici - to je docela důležité, pokud opravdu chcete být schopni problém vyřešit. Není to nijak specifické pro RR, ale je to něco, co je třeba vzít v úvahu - chybějící balíčky můžete nainstalovat, pokud chcete, program dokonce uvádí přesný příkaz, který k tomu můžete použít.

Vzdálené ladění pomocí 127.0.0.1:7747
Čtení symbolů z /lib64/ld-linux-x86-64.so.2...
(V /lib64/ld-linux-x86 nebyly nalezeny žádné symboly ladění -64.so.2)
0x00007f25ce73e110 v _start () z /lib64/ld-linux-x86-64.so.2
Chybí samostatné informace o ladění, použijte:dnf debuginfo-install glibc-2.31-2 .fc32.x86_64--Napište pro více, q pro ukončení, c pro pokračování bez stránkování--

Jakmile se načte rozhraní RR, jste v zemi gdb. Příkazy jsou stejné. Můžete nastavit body přerušení a poté použít podmínky, kdy by tyto body přerušení měly být skutečně aktivovány a provádění úlohy zastaveno.

přestávka 10
podmínka 1 i ==33610
pokračovat

A relace ladění bude vypadat nějak takto:

(rr) další
ukazatel[33611] =33611
9 pro (i =0; 1; i++)
(rr) další
11 ukazatel[i]=i;
(rr) další

Program přijatý signál SIGSEGV, chyba segmentace.
0x000000000040116a v hlavním () na seg.c:11
11 ukazatel[i]=i;

Nyní můžete jít hlouběji a provádět další kontroly. Hlavním rozdílem je, že k tomu všemu dochází v zaznamenané instanci vašeho softwaru, takže potenciálně nezasahujete do skutečného používání vašich služeb a aplikací. V ideálním případě potřebujete chytré nastavení, které dokáže automaticky detekovat problémy a zaznamenat je, ale to je úplně jiný příběh.

Závěr

S používáním RR jsem nestrávil příliš mnoho času, ale líbí se mi, co vidím. Program využívá známé, robustní základy z gdb, což znamená, že se nemusíte znovu učit řešení problémů s Linuxem od nuly. Navíc přidává vrstvu výkonné flexibility, která vám umožňuje minimalizovat časový tlak, který je často spojen s problémy IT – jako je pád softwaru. Můžete nahrávat a přehrávat podle vlastního uvážení. To také znamená, že je pravděpodobnější, že problém najdete, zvláště pokud máte co do činění s komplikovaným a dlouhým prováděním úkolů.

Doufáme, že tento krátký návod bude pro vás užitečný. Ve světě, kde je na každé jídlo deset kuchařů a padesát nadbytečných linuxových nástrojů pro každou potřebu, je hezké vidět software, který nabízí smysluplné funkce navíc, spíše než předělávku toho samého starého. Nyní máte ve svém arzenálu další nástroj, což také znamená o jednu méně omluvu pro to, že nejste schopni vyřešit ty otravné softwarové problémy dostatečně rychle. Tak to funguje, ne.


Linux
  1. Evoluce správců balíčků

  2. Úvod do editoru vi

  3. Základy příkazů Linuxu:printf

  1. Jak nahrávat screencasty v GNOME 3

  2. RR - Softwarový debugger pro nahrávání a přehrávání

  3. Steganografický software

  1. Jak nainstalovat software v RHEL 8

  2. Jak nahrávat a přehrávat linuxové terminálové relace pomocí příkazů „script“ a „scriptreplay“.

  3. Slackware 15 - Stará brigáda