PB173 - Binární programování Linux IX. Gdb a ladění výkonnosti Jiri Slabý ITI, Fakulta informatiky 19. 11. 2013 J. Slabý (ITI, Fl) PB173/07 19. 11. 2013 1 /16 O Funkčnosti (minule) • Dnes ještě více gdb O Výkonnosti/velikosti (dnes) • Optimalizace kódu o Odstranění nepoužitého kódu Část I gdb J. Slabý (ITI, Fl) PB173/07 19. 11. 2013 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 • Manuál: GDB User Manuál J. Slabý (ITI, Fl) gcc a gdb • gcc generuje různé úrovně ladicích informací • -gl (méně informací) • -g2 alias -g o -g3 (navíc informace o makrech) -ggdb (i v kombinaci s -g) • gcc použije i gdb rozšíření, pokud možno • Ladí se obtížněji s optimalizacemi • Proměnné zmizely, konstanty se propagovaly, ... » Bez optimalizací je pomalý kód • V gcc 4.8 se objevilo -Og • Nezapína samotnou generaci ladicích informací! • Používá se v kombinaci s -g... Demo: makra a gdb J. Slabý (ITI, Fl) PB173/07 19. 11. 2013 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) • Formát jsou tři hodnoty O Počet vypisovaných hodnot O Formát vypisovaných hodnot • x: hexa (podobně jako printf) 9 d: decimálně • u: decimálně bez znaménka • s: řetězec o a: adresa • i: instrukce • Ostatní: viz help x 0 Velikost skupiny 9 b: 1 bajt • h: 2 bajty • w: 4 bajty • g: 8 bajtu J. Slabý (ITI, Fl) PB173/07 19. 11. 2013 6/ 16 Úkol Výpisy O Otevřete si nějaký program v gdb O 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 J. Slabý (ITI, Fl) Automatické výpisy • Přidání: display • Informace: info display a Lze nastavit několik automatických výpisů po každém příkazu • Parametry stejné jako p nebo x J. Slabý (ITI, Fl) PB173/07 19. 11. 2013 8/ 16 Vlákna a gdb « Informace: info threads • Přepnutí: thread Demo: pbl73-bin/09/thread.c J. Slaby (ITI, Fl) Další informace • Spousta dalších informací v info • functions, types, variables, locals • sources, line, macros, scopes • symbol • Další viz help info Demo J. Slaby (ITI, Fl) • set,set variable a Registry procesoru: $rax, $rbx, . a Proměnné gdb: $pc, $sp, ... a Vnitřní proměnné: $ostatni 0 Pro vlastní použití « Paměť: {typ>adresa Část II Ladění výkonnosti J. Slabý (ITI, Fl) PB173/07 19. 11. 2013 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 O perf • Používá čítače v procesoru (nutná podpora CPU) • Zahrnuje chování jádra • Umí pracovat s gcc -pg binárkami • Spuštění: perf record -g — binarka —volby • Dokumentace: http://perf.wiki.kernel.org J. Slabý (ITI, Fl) PB173/07 19. 11. 2013 13/16 Profilování O Projděte Si pbl73-bin/09/prof. c O Spusťte prof _pg O Prostudujte výstup gprof -b prof O Nahrajte si výstup • perf record -g prof O Zobrazte si výstup » perf report -g O Zopakujte perf pro prof _pg 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 J. Slabý (ITI, Fl) PB173/07 19. 11. 2013 15/16 Pokrytí kódu O Projděte Si pbl73-bin/09/cov. 0 Spusťte cov O Prostudujte výstup gcov cov O Prostudujte cov.c.gcov