# Příručka k aplikaci Nemiver

## Přehled

Aplikace Nemiver je trvalou snahou o napsání samostatného grafického ladicího programu, který je dobře integrován s pracovním prostředím GNOME. V současné době funkčně podporuje dobře známý ladicí program GNU gdb sloužící k ladění programů v C / C++.

### Vyhlídky do budoucna

Nemiver je navržen jako obecný grafický pracovní nástroj a systém zásuvných modulů, který může sloužit několika různým účelům. V současnosti slouží pouze pro účely ladění, ale do budoucna může výhledově přidat podporu pro ladění paměti pomocí nástroje valgrind nebo profilovací nástroje, jako je oprofile.

## Začínáme

Tento oddíl vysvětluje, jak aplikaci Nemiver spustit a podává o aplikaci základní přehled.

### Spuštění aplikace Nemiver

Aplikaci Nemiver můžete spustit následujícími způsoby:

Nabídka Aplikace

- Zvolte Programování Ladicí program Nemiver.

Příkazový řádek

- Napište `nemiver` a stiskněte Enter.

  #### Doplňující přepínače příkazového řádku

  Přehled přepínačů, které můžete aplikaci Nemiver na příkazovém řádku předat, získáte napsáním `nemiver --help-all`.

### Okno aplikace Nemiver

Když aplikaci Nemiver spustíte, uvidíte okno, které vypadá podobně jako na následujícím obrázku:

#### Okno aplikace Nemiver

Ukazuje hlavní okno aplikace Nemiver.

Okno aplikace Nemiver obsahuje následující prvky:

Panel nabídek

- Nabídky v panelu nabídek obsahují všechny příkazy, které potřebujete k používání aplikace Nemiver.

Panel nástrojů

- Panel nástrojů obsahuje základní ladicí činnosti, které mohou být použity ke spuštění nebo krokování programu, který je laděn.

Sešit zdrojových kódů

- Když se otevřou soubory se zdrojovými kódy laděného programu, zobrazí se v právě tomto místě.

Sešit stavů

- Sešit stavů obsahuje několik karet, které zobrazují informace o laděném programu. Jsou to následující:

  Zásobník volání

- Zobrazuje současný stav zásobníku volání programu, který je právě laděn.

Proměnné

- Zobrazuje seznam lokálních proměnných a argumentů funkcí a navíc i jejich hodnotu a typ.

Cílový terminál

- Když laděný program vypisuje nějaké výstupy na terminál, zobrazí se právě na této kartě.

Body přerušení

- Tato karta zobrazuje seznam všech bodů přerušení, které jsou nastavené. Dvojitým kliknutím na položku v seznamu, případně volbou Přejít do zdrojového kódu z nabídky, si můžete zobrazit místo ve zdrojovém kódu, kde se bod přerušení nachází. Na kartě můžete body přerušení také mazat a zakazovat nebo povolovat. Více informací o bodech přerušení viz nemiver-sect-breakpoints.

Registry

- Tato karta zobrazuje seznam všech registrů CPU a jejich hodnoty. Více informací viz nemiver-sect-registers.

Paměť

- Tato karta zobrazuje současný stav zadaného místa v paměti. Více informací viz nemiver-sect-memory.

### Výběr laděného programu

Existuje několik způsobů, jak program ladit. Nemiver umožňuje načíst místní spustitelný soubor, načíst obraz paměti, napojit se na běžící proces a nebo se připojit ke vzdálenému ladicímu serveru.

#### Ladění spustitelného programu

##### Použití pracovního nástroje

Když chcete vybrat spustitelný program k ladění, zvolte Soubor Načíst spustitelný soubor…, čímž by se mělo zobrazit následující dialogové okno:

###### Dialogové okno Výběr programu ke spuštění

Ukazuje dialogové okno pro výběr spustitelného souboru, který poběží

V tomto dialogovém okně můžete vybrat program, který se má ladit, zadat argumenty nebo přepínače, které se mají spustitelnému souboru předat na příkazové řádce, vybrat pracovní složku, ve kterém má spustitelný soubor běžet a nadefinovat proměnné prostředí, které by se měli nastavit, když se spustitelný soubor začne ladit.

##### Použití příkazového řádku

Spustitelný soubor, který chcete ladit, spustíte z příkazové řádky jednoduše tak, že zadáte název spustitelného souboru. Můžete uvést buď absolutní cestu ke spustitelnému programu nebo, pokud se nachází v prohledávané cestě, pouze základní název spustitelného souboru. Například, pokud patří cesta `/usr/bin` mezi prohledávané, jsou platné oba následující případy:

- `nemiver /usr/bin/nazev_programu`

- `nemiver nazev_programu`

###### Předávání argumentů v příkazovém řádku

Pokud byste potřebovali předat argumenty příkazového řádku programu, který ladíte, měli byste je uzavřít do uvozovek, abyste předešli jejich zpracování aplikací Nemiver: `nemiver "prognam --arg1 --arg2"`.

#### Napojování na běžící program

##### Použití pracovního nástroje

Zvolte položku nabídky Soubor Napojit na běžící program…, která by měla zobrazit následující dialogové okno:

###### Dialogové okno Napojení na běžící program

Ukazuje dialogové okno pro napojení na již běžící program

Vyberte ze seznamu proces a kliknutím na OK započněte ladění vybraného programu. V dialogovém okně může být procesů vypsáno hodně, takže máte možnost si vyfiltrovat jen ten, který vás zajímá, tak, že napíšete text do textového pole umístěného pod seznamem.

##### Použití příkazového řádku

Pokud se chcete napojit na běžící program z příkazového řádku, použijte přepínač `--attach`. Přepínač `--attach` přijímá buď PID procesu nebo jeho název. Takže když například chcete ladit běžící proces `pokus`, který má PID 1121, můžete napsat buď `nemiver --attach pokus` nebo `nemiver --attach 1121`.

#### Načítání obrazu paměti

##### Použití pracovního nástroje

Zvolte položku nabídky Soubor Načíst soubor s obrazem paměti… a tím se zobrazí dialogové okno, které vám umožní soubor s obrazem paměti načíst:

###### Dialogové okno Výběr obrazu paměti k ladění

Ukazuje dialogové okno pro načtení obrazu paměti

##### Použití příkazového řádku

Soubory s obrazem paměti nelze načíst z příkazového řádku.

#### Vzdálené ladění

Aplikace Nemiver umožňuje připojení ke vzdálenému ladicímu serveru.

##### Použití pracovního nástroje

Když se chcete připojit ke vzdálenému ladicímu serveru, zvolte Soubor Připojit ke vzdálenému cíli…

Dialogové okno vzdáleného ladění

Vyberte spustitelný soubor, který se má načíst a umístění, kde se nachází případné sdílené knihovny, a potom vyplňte údaje pro připojení ke vzdálenému serveru.

##### Použití příkazového řádku

Nemiver nenabízí žádný způsob, jak se připojit ke vzdálenému serveru pomocí příkazového řádku.

## Používání aplikace Nemiver

Tento oddíl popisuje, jak použít aplikaci Nemiver k ladění vaší aplikace.

### Základní ladicí činnosti

Základní ladicí činnosti jsou dostupné na hlavním panelu nástrojů, v nabídce Ladit a přes klávesové zkratky. Většina běžných činností je uvedena níže:

Pokračovat

- Spustí program. Program poběží dokud nenarazí na bod přerušení nebo dokud program neskončí, ledaže bude přerušen ručně uživatelem kliknutím na Zastavit. Tuto činnost lze vyvolat z klávesnice pomocí F5.

Následující

- Provede následující příkaz a zastaví se, jakmile dosáhne následujícího řádku v souboru. V některých ladicích programech je to nazýváno „Step Over“ („Krok přes“). Tuto činnost lze vyvolat z klávesnice pomocí F6.

Krokovat

- Provede následující příkaz, přičemž se zanoří do funkce, pokud je to možné. V některých ladicích programech je to nazýváno „Step in“ („Krok dovnitř“). Tuto činnost lze vyvolat z klávesnice pomocí F7.

Krokovat ven

- Dokončí provádění současné funkce a zastaví se hned po návratu z této funkce. Tuto činnost lze vyvolat z klávesnice pomocí Shift F7.

Restartovat

- Znovu načte současný spustitelný soubor a začne provádění od začátku. Tuto činnost lze vyvolat z klávesnice pomocí Shift F5.

Zastavit

- Ručně přeruší provádění programu. Tato činnost je přístupná jen v případě, že v ladicím programu běží spustitelný soubor (např. po té, co uživatel klikne na Pokračovat). Tuto činnost lze vyvolat z klávesnice pomocí F9.

Po načtení spustitelného souboru vytvoří Nemiver výchozí bod přerušení ve funkci `main()`, takže když provádění dojde k funkci `main()`, zastaví se běh a čeká se na vstup. V tu chvíli můžete program krokovat, zkoumat proměnné (viz nemiver-sect-inspecting-variables) nebo nastavit další body přerušení (viz nemiver-sect-breakpoints).

### Prohlížení proměnných

Aplikace Nemiver zobrazuje seznam lokálních proměnných na kartě Proměnné v sešitu stavů. Když chcete studovat jinou proměnnou (nebo i jakýkoliv výraz), můžete použít Prohlížeč proměnných. Ten zobrazíte tak, že vyberete Ladit Prohlédnout proměnnou. Objeví se prohlížeč proměnných, který vypadá nějak následovně:

Dialogové okno sloužící k prohlížení proměnných

Do vstupního pole můžete zapsal název libovolné proměnné nebo jednoduchý výraz (jako `pZbozi->Skladem` a pokud bude proměnná platná a v rozsahu působnosti, zobrazí se podrobné údaje daného výrazu.

Můžete také proměnnou vybrat v editoru zdrojového kódu a potom spustit Prohlížeč proměnné. Ten se pak pokusí zobrazit informace vztahující se k vybranému názvu proměnné.

#### Klávesová zkratka

Prohlížeč proměnných můžete spustit rovněž stiskem klávesy F12.

Nemiver vám také umožňuje zobrazit seznam všech globálních proměnných aplikace ve zvláštním okně. Dialogové okno Globální proměnné zobrazíte výběrem Ladit Zobrazit globální proměnné nebo stiskem Ctrl G.

Dialogové okno s globálními proměnnými

U některých programů (zvláště programů v C++) může vypsání všech globálních proměnných zabrat dlouhou dobu.

### Nastavení bodu přerušení

V aplikaci Nemiver je několik různých způsobů, jak nastavit body přerušení. Nemiver automaticky nastavuje bod přerušení ve funkci `main()`, když poprvé začnete ladit nový spustitelný soubor. Pokud chcete nastavit další body přerušení, můžete to udělat následovně:

- Klikněte na okraj vedle řádku, na kterém chcete bod přerušení nastavit.

- Umístěte kurzor na řádek, kde chcete bod přerušení nastavit a v nabídce vyberte Ladit Nastavit bod přerušení nebo zmáčkněte klávesu F8.

- Nastavte bod přerušení uvedením názvu funkce nebo místa v souboru tím, že vyberete Ladit Nastavit bod přerušení… nebo zmáčknete Ctrl B. Zobrazí se dialogové okno, které vypadá nějak následovně:

  Dialogové okno pro nastavení bodu přerušení

  Bod přerušení můžete zadat jako konkrétní místo v souboru nebo jako název funkce. V případě, že existuje více než jedna funkce se stejným názvem, zobrazí aplikace Nemiver seznam všech odpovídajících funkci a požádá vás o výběr jedné z nich.

#### Zakázané body přerušení

Body přerušení mohou být buď povolené nebo zakázané. Ladicí program zastaví provádění vždy, když dosáhne povoleného bodu přerušení, ale zakázaný bod přerušen se nijak neprojeví. Díky tomu můžete bod přerušení dočasně odstranit, aniž byste jej museli smazat.

Když chcete bod přerušení zakázat nebo povolit, klikněte na zaškrtávací políčko vedle čísla bodu přerušení na kartě Body přerušení v sešitě stavů. Jinou možností, jak povolit nebo zakázat bod přerušení na řádku, kde se právě nachází kurzor, je zmáčknout Shift F8.

Následující obrázky ukazují ve zdrojovém kódu rozdíl mezi povoleným a zakázaným bodem přerušení

Ukázka povoleného bodu přerušení

Povolený bod přerušení

Ukázka zakázaného bodu přerušení

Zakázaný bod přerušení

#### Otevření zdrojových souborů

Někdy se může stát, že neznáte přesný název funkce nebo číslo řádku, kde chcete nastavit bod přerušení, takže musíte otevřít zdrojový soubor. Můžete sice otevřít jakýkoliv soubor nacházející se v souborovém systému, ale aplikace Nemiver vám také umí nabídnout seznam zdrojových souborů, které byly použité k sestavení spustitelného souboru a vy si můžete jednoduše vybrat z nich. Když zvolíte Soubor Otevřít zdrojový soubor…, zobrazí se následující:

Ukazuje dialogové okno pro otevření souboru se zdrojovým kódem

Pokud chcete vybírat v souborovém systému jakýkoliv soubor, použijte volbu Vybrat v souborovém systému. Pokud chcete vybírat v seznamu souborů použitých k vytvoření spustitelného souboru, použijte volbu Vybrat v cílovém spustitelném souboru.

##### Určování zdrojových souborů pro dynamicky načítané moduly

V případě, že cílový spustitelný soubor načte moduly za běhu (např. pomocí `dlopen()`), nebude Nemiver schopen určit, které soubory byly použity k sestavení těchto modulů, pokud nebudou zrovna načtené.

### Pokročilé ladění

#### Registry

Widget na úpravu registrů se nachází na kartě Registry v sešitě stavů. Případně můžete zmáčknout Alt F5 a tím se přímo dostanete na tuto kartu.

Widget pro úpravu registrů

Tento widget zobrazuje současné hodnoty všech registrů CPU. Můžete hodnoty registru upravit kliknutím ve sloupci Hodnota a zadáním nové hodnoty. V případě, že se hodnota registru změnila od posledního zastavení ladění, bude zvýrazněná červeně.

#### Paměť

Widget Paměť umožňuje zobrazit přímo část paměti. Díky tomu můžete získat na nižší úrovni zobrazení toho, co se děje, když váš program běží.

Widget pro úpravu paměti

Do pole Adresa ve widgetu Paměť zadejte adresu paměťového segmentu, který chcete zobrazit. Pokud bude adresa platná pro laděný program, zobrazí se hodnoty v paměti od zadané adresy. Mohou být zobrazeny jako bajty, slova (2 bajty) nebo dlouhá slova (4 bajty), podle volby ve vyskakovací nabídce Seskupovat podle. Během krokování programu se hodnoty automaticky aktualizují.

Widget můžete používat nejenom k prohlížení hodnot v paměti, ale i k jejich úpravě. Můžete je upravovat jak v podobě šestnáctkových čísel (v levé části widgetu Paměť), tak v podobě znaků ASCII (v pravé části widgetu Paměť). Všechny změny se projeví ihned.

## Uložení a obnovení sezení

Nemiver umí uložit vaše ladicí sezení, takže si jej později můžete obnovit. Součástí je ukládání takových informací, jako je laděný spustitelný soubor, nastavené proměnné prostředí, argumenty příkazového řádku předané laděnému programu, seznam otevřených souborů a nastavené body přerušení. Díky tomu všemu se můžete vrátit zpět do stavu, kde jste naposledy skončili, tak rychle, jak jen to je možné.

### Ukládání sezení

Aplikace Nemiver ukládá vaše sezení automaticky při ukončení, takže se o to nemusíte starat. Pokud však chcete sezení výslovně uložit před zavřením aplikace Nemiver, můžete tak učinit výběrem Soubor Uložit sezení na disk.

### Obnovení uloženého sezení

#### Použití pracovního nástroje

Zvolte Soubor Obnovit uložené sezení… a vyberte sezení ze seznamu.

##### Dialogové okno Uložená sezení

Ukazuje dialogové okno pro obnovení uloženého sezení

#### Z příkazového řádku

Pokud znáte ID sezení, které chcete provozovat, můžete spustit ladicí sezení z příkazového řádku. Například, pokud chcete spustit sezení číslo 3, můžete tak učinit následujícím příkazem: `nemiver --session 3`.

## O aplikaci Nemiver

Aplikaci Nemiver napsali Dodji Seketeli a Jonathon Jongsma za přispění mnoha dalších. Pokud se chcete o aplikaci Nemiver dovědět více, navštivte webové stránky projektu Nemiver.

Pokud chcete oznámit chybu nebo navrhnout vylepšení vztahující se k této aplikaci nebo této příručce, podívejte se na oddíl Ohlasy v Uživatelské příručce GNOME.

Tento program je šířen podle ustanovení GNU General Public License, vydávané Free Software Foundation; a to buď verze 2 této licence anebo (podle vlastního uvážení) kterékoliv pozdější verze. Kopii této licence naleznete pod tímto odkazem nebo v souboru COPYING přiloženém ke zdrojovým kódům tohoto programu.