Narsil č. 10

Monst 2

↑

MONST v 2.13 (Hot Keys)

------------------

Už delší dobu mě NED neustále ukecával, abych napsal nějakej článek, ve kterém konečně popíšu všechny funkce debuggeru od HiSoftu. Ne, že by ho neuměl používat, ale bohužel nezná všechny ty šílené klávesové kombinace, které použijete sice jen jednou za čas, ale když je neznáte, tak se vám odlaďuje mnohem obtížněji. (I když ve skutečnosti se v programu hledají chyby vždycky strašně těžko, takže nejlepší řešení je pro jistotu neprogramovat vůbec :-).

Dost už bylo pesimismu, raději se pojďte podívat, kolik má takový pořádný debugger možností. Jediný na PC, který má všechny tyto schopnosti také, je Turbo Debugger od Borlandu a ten je se svými 400 Kb opravdovou perličkou. Jen tak pro srovnání, MONST má něco okolo 20 Kb :-).

[Q] Dotaz na hardware adresu. Vypíše obsah portu.

[W] Vyplňování určité oblasti paměti jednobajtovým vzorem. Syntaxe: začátek, konec, vzorek (byte)

[R] Start od adresy. K dispozici jsou volby: GO; start od právě aktuální adresy uložené v čítači programu, jakýkoliv návrat do debuggeru možný až po ukončení běhu programu či přerušení breakpointem.

Until; běž dokud ???

Instruction; po zadání čísla běží určitý počet instrukcí, pak se zastaví. Opět možno přerušit breakpointem.

Slow; běž pomalu, procesor běží v podstatě v Trace Módů, praktické využití patrně nemožné. Pouze u některých her vzniknou opravdu působivé efekty (např. Barbarian :-)

[T] Zápis na hardware adresu (port). Syntaxe: Adresa portu, hodnota

[U] Start od adresy: Syntaxe: Adresa odkud má program začít běžet.

[I] Kopíruj. Syntaxe: počáteční adresa, konečná adresa, cílová adresa.

[L] Nahrej program, pokud nenaskočíte do MONST rovnou z editoru GENST, můžete pomocí této volby nahrát do paměti libovolný program a dle libosti (a zkušeností se strojovým kódem) se v něm hrabat. Pokud nemáte program nahraný v paměti, jsou všechny trasovací příkazy monitoru zakázány.

[O] Jedná se o kalkulačku, pokud používáte symbolická návěstí, můžete s nimi pracovat jako s čísly, výsledek je vypsán hexadecimálně a decimálně. Kalkulačka však pracuje pouze s hexadecimální soustavou.

[P] Disasembluj. Umožní vám poslat vybraný úsek paměti ve zdrojové formě na libovolné zařízení (disk, tiskárna).

Syntaxe: Start, Konec; týká se části, kterou chcete disasemblovat

Cross reference ???

Data: Start, Konec, části, které chcete vypsat pouze jako data (dc.b) zde musíte definovat.

Jméno Souboru.

[A] Source file to load ???

[S] Ulož binární soubor. Umožní vám uložit libovolnou část paměti do souboru.

Syntaxe:

Jméno Souboru

Začátek, Konec

[D] Nastav disk, directory. Pokud budete chtít nastálo pracovat s určitým diskem a directory, můžete si ho zde nastavit. Syntaxe: (např.) A:\HEAD

[G] Hledej v programu. Vyhledává od místa, na kterém je nastaveno právě aktivní okno. Je možnost vyhledávat: B; byte

W; word

L; long word

T; Napíšete řetězec a ten se bude vyhledávat v paměti. V tomto případě se vás program zeptá, jestli si přejete při vyhledávání ctít VELKÁ a malá písmena.

I; Vyhledává instrukci v programu. Opět zapíšete řetězec, ale tentokrát se bude prohledávát pamět v disasemblované formě, tedy nikoliv přímo v ní, jako u text. Používate-li symbolická navěstí, můžete hledat dokonce i je.

[H] History; vypíše posledních (asi) 6 traceovaných instrukcí i s obsahy registrů (i PC).

[L] Symbols; vypíše všechny symboly i s jejich adresami použité ve vašem programu.

[V] Přepínaní mezi pracovní (na tu zobrazuje program) a debugovací obrazovkou.

[B] Nahraje datový soubor do paměti. Syntaxe: Jméno Souboru, Počáteční adresa (tam se bude nahrávat).

[N] Next Search, pokračuje v dalším vyhledávání vámi hledaného prvku. Musí být předtím nadefinován funkcí Search.

[M] nebo Alt [A], nastavení adresy aktivního okna

[TAB] nebo CTRL [I], přepínání mezi jednotlivými okny (Registr, Disasembler, Monitor).

Alt + číslo okna, které si přejeme zaktivizovat. Na něj potom bude přepnuto.

CTRL [W], CTRL [Y] nebo CTRL [Z], trace o jednu instrukci.

CTRL [E], opětovné nastavení exception vektorů (adresa 0-F0).

CTRL [R], rozběhnutí programu počínaje adresou uloženou v PC.

CTRL [O], na barevném monitoru přepíná rozlišení (320x200, 640x200).

CTRL [P], nastavení preferencí.

Screen Timer ??? Follow Traps (budeme následovat při trace i TRAPy)

Relative offsets (ukazovat symboly u offsetovaných adres)

Ignore case (ignorovat VELKÁ a malá písmena)

Ignore Cartrigde Area (ignorovat paměť, kterou obsazuje cartdigde)

Symbol Lenght (uznávaná delka symbolů)

TOP of RAM (vrchol RAM, můžete si ho klidně snížit).

Save Preferences (uložit?)

CTRL [A], umístí breakpoint na následující instrukci (v paměti) a odstartuje program. Vhodné při trasování smyček, odskoků apod. Nesmí však být použito u JMP apod., většinou se v těchto případech už na toto místo nevrací :-).

CTRL [S] Přeskočení instrukce v paměti. Instrukce je ignorovaná a čítač se posune na následující.

CTRL [D] BDOS Breakpoint ???

CTRL [K] Zruš všechny aktivní breakpointy.

CTRL [C] Ukončení programu. Pokud jste do MONST skákali z GENST, proběhne návrat do GENST.

CTRL [B] Nastavení breakpointu na první pozici v aktivním okně. Toto okno však musí být disasemblovací.

Alt [E] Přepnutí do editačního módu. Dá se zapnout pouze při zapnutém Memory okně. Zde potom můžete editovat jednotlivé bajty jako HEX čísla, nebo stiskem [TAB] přepnout do editování v režimu ASCII. Ukončení editování provedeš opětovným stiskem Alt [E].

Alt [Z] Právě aktivní okno se zvětší na celou obrazovku, což vám umožní větší přehled (i když při 200 Kb programu je to vcelku jedno ;-)).

Alt [P] Vytištění obsahu přávě aktivního okna na tiskárnu.

Alt [F] Zmenšení velikosti písmen v aktivním okně. Budete vidět o několik řádků více. (Výhodné na Mono Monitoru).

Alt [S] Pokud pracujete ve vyšším rozlišení než 320x200 tak můžete okno Memory a Disassembler rozpůlit a tím získat další okna navíc.

Alt [L] Registr to lock. Doslova zavře registr do aktivního okna. Toto okno bude poté vždy nabývat adresu tohoto registru.

Alt [B] Breakpoint. Umožní nastavit breakpoint na libovolnou adresu v paměti. Proměnná param určuje, po kolika průchodech tímto místem se program skutečně zastaví. Syntaxe: Adresa, param.

Alt + Shift + [HELP] stop program. Pokud se někdy při trasování překlepnete (nevšimnete si odskoku, umístíte špatně breakpoint), není ještě nic ztraceno. Touto kombinací můžete běh programu zastavit a PC nabyde právě tu hodnotu, kde program zrovna běžel. Pozor! na tuto funkci není radno spoléhat, při zákazu přerušení apod. pochopitelně přestane být aktivní.

V žádném případě nechci tvrdit, že tento článek byl nějakým manuálem. Pouze se jedná o popis jednotlivých kláves jednoho z nejlepších a nejmenších debuggerů na světe. Debuggeru pro skutečné kódery a ne ty hračičkáře, co by chtěli celý program zanalizovat až do posledního puntíku ještě před tím, než ho spustí ;-). Viz PC a Bill Gates :-).

HEAD