Debugování v C/C++. Co musíme však nejdříve udělat? Přeložit program s debug informacemi Umožníme přidáním volby –g do překladače POZOR!!! Pokud se program.

Slides:



Advertisements
Podobné prezentace
 AutorIng. Martin Allmer ŠkolaEuroškola Strakonice Datum6. Června 2013 Ročník3. Tematický okruhPráce s počítačem Číslo VM Anotace Obnovení systému Windows.
Advertisements

Pro začátek něco lehčího
ŘÍDÍCÍ STRUKTURY - PODMÍNKY
Střední průmyslová škola strojnická Olomouc, tř.17. listopadu 49 Výukový materiál zpracovaný v rámci projektu „Učíme moderně“ Registrační číslo projektu:
MATLAB vytváření funkcí, grafika
Na panelu zpráv klikněte na Povolit úpravy,
Pascal - příklady.
Základní škola a mateřská škola Bzenec Číslo projektu: CZ.1.07/1.4.00/ Číslo a název šablony klíčové aktivity: III/2: využívání ICT – inovace Vypracoval/a:
Základy html pro úplné začátečníky.
Vytváření, použití dávkových souborů
SOFTWARE operační systémy
Dajbych Václav Pole Další stránku vyvoláte levým kliknutím na Vaší myš, nebo popřípadě rolovacím kolečkem.
UŽITEČNÉ PROGRAMY – MŮJ PRVNÍ SKRIPT Spustíme více prográmků najednou. SPŠ Teplice - 3.V.
Hromadná korespondence
J a v a Začínáme programovat Lucie Žoltá pole řetězec debugr.
J a v a Začínáme programovat Lucie Žoltá metody, objekty, konstruktor.
Soustava lineárních nerovnic
MS PowerPoint Prezentační manažer Kapitola 13.1 (Schránka a operace se schránkou)
Základní škola a mateřská škola Bzenec Číslo projektu: CZ.1.07/1.4.00/ Číslo a název šablony klíčové aktivity: III/2: využívání ICT – inovace Vypracoval/a:
25. ALGORITMIZACE A PROGRAMOVÁNÍ
Vyučovací hodina 1 vyučovací hodina: Opakování z minulé hodiny 5 min Nová látka 20 min Procvičení nové látky 15 min Shrnutí 5 min 2 vyučovací hodiny: Opakování.
13AMP 6. přednáška Ing. Martin Molhanec, CSc.. Co jsme se naučili naposled Synchronizace procesů Synchronizace procesů Producent-Konzument Producent-Konzument.
Mgr. Jan Lavrinčík, DiS..  pro proměnnou typu Date alokováno 8 bajtů paměti, které obsahují spakovaný vzorek bitů nejen pro datum, ale i pro přesný čas.
Tabulkový procesor.
Hromadná korespondence, makro
Štěpán Lískovec, 4.A.  =základní programové vybavení počítače (tj.software)  hlavní úkol:  A, zajistit uživateli možnost ovládat PC  B, vytvořit pro.
C# - pointery Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
Objektové programování
Informatika / programování
Ovládáme králíčka Petříka
Poznámky pro výuku Předmět: Vlastivěda
6. cvičení Polymorfismus
JavaScript Podmínky, cykly a pole.
Radek Tůma Blokování HTML tagů v příspěvcích. Rok_login.php Toto je funkce pro blokování HTML příkazů při vládání komentářů k článkům. Tato funkce je.
C# - Testování a ladění aplikací Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
Proměnná typu "pole" Mezi proměnné typu "pole" patří všechny superglobální proměnné. Mezi proměnné typu "pole" patří všechny superglobální proměnné. To.
1. Derivace Derivace je míra rychlosti změny funkce.
Jazyk XML Jazyk pro tvorbu strukturovaných dokumentů Syntaxí velmi podobný HTML Hlavní cíle návrhu: Snadná editace - jazyk je textový Snadné strojové zpracování.
7. Typ soubor Souborem dat běžně rozumíme uspořádanou množinu dat, uloženou mimo operační paměť počítače (na disku). Pascalský soubor je abstrakcí skutečného.
Pole Arrays.
Univerzita třetího věku kurz Pokročilý Tabulkový procesor 2.
Predikátová logika1 Predikátová logika 1. řádu Teď „logika naostro“ !
Základy pedagogické metodologie
Soubory BI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky © Miroslav Balík Fakulta informačních technologií České vysoké.
Balíky Hlavní balík - main - zatím jsme s jiným nepracovali Rozdělují tzv. namespaces = množiny jmen pro proměnné $lemma = "cukr"; znamená $main::lemma.
Podprogramy (subroutines) Pojmenované kousky programu, které –tvoří logicky ucelené části –se v programu opakují Jsou zapsány na jednom místě a v případě.
Pokročilé datové typy (struktury, unie, dynamické proměnné)
IB111 Práce se soubory Správa paměti. Práce se soubory v Pythonu Soubor musíme „otevřít“ Poté s ním pracujeme –Čteme a/nebo zapisujeme Nakonec musíme.
Rastrová grafika E4.
Jak na bezpečný internet?
Základy programování mikropočítačů První program v jazyce symbolických adres.
Odborný výcvik ve 3. tisíciletí Tato prezentace byla vytvořena v rámci projektu.
Tabulkový procesor Použití nejběžnějších funkcí v Excelu, datové funkce, funkce uvnitř funkcí Autorem materiálu a všech jeho částí, není-li uvedeno jinak,
ÚVOD DO PŘEDMĚTU INFORMAČNÍ TECHNOLOGIE. OPERAČNÍ SYSTÉM Je v informatice základní programové vybavení počítače (tj. software), které je zavedeno do paměti.
Název projektu:ZŠ Háj ve Slezsku – Modernizujeme školu Číslo projektu:CZ.1.07/1.4.00/ Oblast podpory: Zlepšení podmínek pro vzdělávání na základních.
Dostupné z Metodického portálu ISSN: , financovaného z ESF a státního rozpočtu ČR. Provozováno Výzkumným ústavem pedagogickým v Praze.
Moduly.
Programovací jazyk C# 4. část - cykly.
Definiční obor a obor hodnot
Inf Tabulkový procesor
Operační systémy 9. Spolupráce mezi procesy
Soustava lineárních nerovnic
1. ročník oboru Mechanik opravář motorových vozidel
Slovní úlohy o společné práci − 2
Instalace programů do Linuxu
Slovní úlohy o společné práci − 2
Práce s procesy Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí Autor:
Grafy kvadratických funkcí
Definiční obory. Množiny řešení. Intervaly.
Grafy kvadratických funkcí
Transkript prezentace:

Debugování v C/C++

Co musíme však nejdříve udělat? Přeložit program s debug informacemi Umožníme přidáním volby –g do překladače POZOR!!! Pokud se program skládá z více modulů (.o souborů) je potřeba přidat volbu –g při tvorbě každého takového modulu

Co by jsme naopak dělat neměli Debugovat programy které jsme prohnali přes optimalizující překladač Tj. pokud budu debugovat tak nepřidávám volbu –o ( a už vůbec ne -o2 -o3 ) Pokud tak učiníme tak debugovaný program bude odlišný od toho který máme před sebou ve zdrojovém textu

Rozdíl debbugování v C oproti C++ C++ umožňuje používat šablony. Tj. při pádu programu přidává i názvy šablon C++ umožňuje dědičnost a špatně se dohledává pokud je chyba ve virtuální destruktoru některé z nadřezených tříd Debuggování v C++ je tudíž trošku těžší a někdy velice nepřehledné

Jaké máme možnosti ? Debugovat ze souboru vzniklých při pádu programu Debugovat přímo spuštěný program

Debugování z core-dumpu 1 Musíme nejdříve donutit OS tvořit core- dumpy - Zvládneme pomocí příkazu “ulimit –c unlimited“ - Příkaz “ulimit“ má spoustu dalších užitečných vlastností ( změna počtu vláken, max. procesorového času apod.)

Debugování z core-dumpu 2 Po spadnutí programu se nám nyní vytvoří soubor core( číslo procesu ) Tento soubor můžeme nyní předhodit debbugeru a podívat se kde se stala chyba Provedeme pomocí: gdb ( název programu ) ( coredump )

Debugování z core-dumpu 3 Nyní když jsme v debbugeru tak vidíme řádek na kterém se stala chyba Zadáme teda příkaz “bt“ ať vídíme kde přesně se stala chyba a jaké volání funkcí jí předcházelo

Debugování z core-dumpu 4 Další příkazy které se mohou hodit ptype ( typ proměnné ) print ( název proměnné nebo výraz ) set print pretty print struktura->jmeno p list

Debugování z core-dumpu 5 Pozitiva + Nezdržujeme běh programu debbugerem +Debbugujeme až když skutečně víme, že něco spadlo Negativa - Né každý pád programu tvoří coredump ( např. signál pipe ) - Z coredumpu debbuger nikdy nezíská tolik informací jako přímo při běhu programu

Debugování za běhu 1 Můžeme používat přímo a nepotřebujeme k němu žádný coredump Musíme však počítat s někdy mnohonásobně větší zátěží při běhu programu

Debugování za běhu 2 - GDB Možnost číslo 1 – použijeme gdb Tuto možnost velice nedoporučuju. Osobně používám na debugování gdb v “bojových situacích“ Podíváme se teda na pár užitečnách příkazů které můžou pomoc

Debugování za běhu 3 - GDB Nejdříve spustíme program pod gdb gdb ( název programu) Takto spuštěný program je zatím zastavený. Spustíme ho tedy příkazem run ( argumenty z příkazové řádky )

Debugování za běhu 4 - GDB Breakpointy  break ( číslo řádky )  break ( název funkce )  clear ( číslo řádky / název funkce )  Info breakpoints Krokování  next  continue

Debugování za běhu 5 - strace Strace je prográmek který nám sobrazuje veškeré systémové volání Hodí se tedy pokud chceme vyzkoumat co program volal a s jakými argumenty a nebo kvůli čemu a kde dostal signál Pokud tušíme, že nám program zhodil nějáký signál je toto nejlepší program na nalezení problému

Debugování za běhu 6 Všechny předchozí programy jsou užitečné ale nezobrazují všechny užitečné informace. Např. Nevíme kde jsme uvolnili proměnnou do které jsem se pak pokusili něco napsat Nekontolují memory-leaky apod.

Debugování za běhu 6 - strace Použití strace ( název programu ) Na obrazovce pak uvidíme postupně všechna volání i s parametry

Debugování za běhu 7 - valgrind Valgrind je užitečný prográmek který kontroluje veškeré operace s pamětí Odborně – Program na kontrolu konzistence heapu Asi nejlepší ze všech programů na debugování Bohužel zatím použitelný jen pod Linuxem

Debugování za běhu 7 - valgrind Program není ve standratní knihovně a porot ho musíme stáhnout z internetu Např z. apt-get install valgrind ( Debian ) yum install valgrind ( Red Hat )

Debugování za běhu 8 - valgrind Program se skládá z několika částí kde každá se soustředí na jiný druh problémů Nejvíce používané jsou  error-check  leak-check

Debugování za běhu 9 - valgrind Pokud valgrind spustíme bez jakýchkoliv parametrů tak použijeme modul pro kontrolu chyb Použití valgrind ( název programu )

Debugování za běhu 10 - valgrind Ve výpise se nám pak zobrazí chyby  Proměnné bez defaultních hodnot  Dvojí uvolnění paměti  Zápis mimo paměť  Přepis paměti  Zápis do paměti kterou jsme nealokovali

Debugování za běhu 10 - valgrind Nejlepší je, že valgrind nám i ukáže proč k chybě došlo! Například pokud zapisujeme do předtím uvolněné paměti tak nám i ukáže místo kde jsme jí uvolnili Pokud zapisujeme mimo alokovanou oblast tak nám ukáže o kolik jsme se přepsali a kde máme zaalokovat více místa

Debugování za běhu 11 - valgrind Dalším skvělým modulem je kontrola memory-leaků Stačí spusti valgrind s jinou volbou valgrind --leak-check=full ( název programu ) Valgrind nám nyní ukáže všechnu paměť kterou jsme alokovali ale neuvolnili a taky paměť na kterou se již nemůžeme dostat

Debugování za běhu 12 Pozitiva + Máme mnohem více informací +Můžeme ovlivňovat chování programu +Valgrind ;) Negativa - Běh s debbugerem je mnohonásboně náročnější než bez debbugeru

IDE Další věc která se pro debugování hodí jsou různá IDE Z vlastní zkušeností můžu doporučit Eclipse s pluginem pro C/C++ Další skvělý nástroj je KDevelop který v sobě integruje strace/GDB/valgrind a spoustu dalších užitečných věcí

Shrnutí Pokud jsem si jistý, že v programu už nemám chybu tak mi stačí ladění z coredumpu Pokud potřebuju ladit intenzivně tak nechám běžet program pod debbugerem

Děkuji za pozornost