# Příručka k aplikaci Nemiver

2008
Jonathon Jongsma
2010
Marek Černocký (marek@manet.cz)
Projekt Nemiver
Jonathon
Jongsma
GNOME
1.0
2007

Počáteční verze

2.0
2008

Aktualizováno pro vydání 0.5.0

Tato příručka popisuje aplikaci Nemiver ve verzi 0.5.0

## Ohlasy

Pokud chcete oznámit chybu nebo navrhnout vylepšení vztahující se k aplikaci Nemiver nebo této příručce, postupujte dle instrukcí na webových stránkách Nemiver.

Nemiver je grafický ladicí program pro pracovní prostředí GNOME.

## 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 .

  Registry

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

  Paměť

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

### 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 sloužící k výběru spustitelného souboru, který má běžet

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/nazevprogramu`

- `nemiver nazevprogramu`

###### 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 sloužící k napojení na 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

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

Ukazuje dialogové okno sloužící k načtení souboru s obrazem 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é 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 ) nebo nastavit další body přerušení (viz ).

### 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 prohlížeče 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 Globální proměnné

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 Nastavit bod 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 sloužící k otevírání zdrojových souborů

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 na úpravu obsahu 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 na úpravu obsahu 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 na 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.