PB173 - Binární programování Linux IX. Gdb a ladění výkonnosti Jiri Slabý Fakulta informatiky Masarykova univerzita 18. 11. 2014 Jiri Slabý (Fakulta informatiky, MU) PB173/03 18.11.2014 1/16 Ladění Minule « Ladění funkčnosti Q Ještě více gdb Ladění výkonnosti • Profilování • Pokrytí kódu Jiri Slabý (Fakulta informatiky, MU) Sekce 1 Ještě více gdb Jiri Slabý (Fakulta informatiky, MU) PB173/03 18.11.2014 3/ 16 Debugger gdb (opakování) • Pracuje s ELFem a DWARFem • Používá systémové volání ptrace • Sleduje proces Upravuje vykonávání • Čte a mění paměť • ... • Spuštění: gdb --args binarka --volby • Nápověda: help a Manuál: GDB User Manuál Jiri Slabý (Fakulta informatiky, MU) PB173/03 18.11.2014 4/ 16 gcc a gdb • gcc generuje různé úrovně ladicích informací -gl (méně informací) • -g2 alias -g • -g3 (navíc informace o makrech) • -ggdb (i v kombinaci s -g) • gcc použije i gdb rozšíření, pokud možno • S optimalizacemi se ladí se obtížněji • Proměnné zmizely, konstanty se propagovaly, ... • Ale bez optimalizací je pomalý kód • Někdy i nepřeložitelný • V gcc 4.8 se objevilo -Qg • Zapíná jen optimalizace, které neztěžují ladění • Nezapína samotnou generaci ladicích informací! o Používá se v kombinaci s -g... Demo: makra, gdb a pbi73-bin/09/mac. c Jiri Slabý (Fakulta informatiky, MU) PB173/03 18.11.2014 5/ 16 Výpisy • Dump (x) a print (p) • Lze použít s formátováním (x/f a p/f, kde f je formát) a Formát jsou tři hodnoty O Počet vypisovaných hodnot O Formát vypisovaných hodnot • x: hexa (podobně jako printf) • d: decimálně • u: decimálně bez znaménka • s: řetězec • a: adresa • i: instrukce • Ostatní: viz help x 0 Velikost skupiny • b: 1 bajt • h: 2 bajty • w: 4 bajty • g: 8 bajtů Jiri Slabý (Fakulta informatiky, MU) PB173/03 18.11.2014 6/ 16 Úkol Výpisy O Otevřete si nějaký program v gdb 0 Spusťte (start) O Vypište • Adresu aktuální instrukce (p/a $pc) • 20 instrukcí od aktuální (x/20i $pc) • 32 hexa byte hodnot na zásobníku ($sp) • 8 hexa giant hodnot na zásobníku Jiri Slabý (Fakulta informatiky, MU) PB173/03 18.11.2014 7/ 16 Automatické výpisy • Přidání: display • Informace: info display • Lze nastavit několik automatických výpisů po každém příkazu • Parametry stejné jako p nebo x Úkol: vypište si aktuální instrukci po každém příkazu Jiri Slabý (Fakulta informatiky, MU) PB173/03 18.11.2014 8/ 16 Vlákna a gdb • Informace: info threads • Přepnutí: thread Demo: pbl73-bin/09/thread.c Jiri Slabý (Fakulta informatiky, MU) Další informace • Spousta dalších informací v info a functions, types, variables, locals • sources, line, macros, scope • symbol • Další viz help info Demo Jiri Slabý (Fakulta informatiky, MU) Změna běhu a set,set variable a Registry procesoru: $rax, $rbx, . • Proměnné gdb: $pc, $sp, ... a Vnitřní proměnné: $ostatni • Pro vlastní použití a Paměť: {typ}adresa Sekce 2 Ladění výkonnosti Jiri Slabý (Fakulta informatiky, MU) PB173/03 18.11.2014 12/16 Profilování Co zabírá nejvíce času při vykonávání? O gprof • Při překladu: gcc -pg ... • Potom se program spustí a data se uloží na disk • gprof data načte a zobrazí • Demo: dump Q perf • Používá čítače v procesoru (nutná podpora CPU) • Zahrnuje chování jádra o Umí pracovat s gcc -pg binárkami • Spuštění: perf record -g -- binarka --volby • Dokumentace: http: //perf . wiki . kernel. org Jiri Slabý (Fakulta informatiky, MU) PB173/03 18.11.2014 13/16 Úkol Profilování O Projděte Si pbl73-bin/09/prof . c 0 Spusťte prof _pg O Prostudujte výstup gprof -b prof _pg O Nahrajte si výstup perf • perf record -g prof Q Zobrazte si výstup • perf report -g O Zopakujte perf pro prof _pg Jiri Slabý (Fakulta informatiky, MU) Pokrytí kódu Která část kódu se vůbec nevykonává? • gcov • Při překladu: gcc --coverage ... • Potom se program spustí a data se uloží na disk • gcov data načte a zapíše cov. c. gcov Jiri Slabý (Fakulta informatiky, MU) PB173/03 18.11.2014 15/16 Úkol Pokrytí kódu O Projděte Si pbl73-bin/09/cov.c O Spusťte cov O Prostudujte výstup gcov cov O Prostudujte cov.c.gcov Jiri Slabý (Fakulta informatiky, MU)