Debugger EM400: Różnice pomiędzy wersjami

Z MERA 400 wiki
Przejdź do nawigacji Przejdź do wyszukiwania
mNie podano opisu zmian
Linia 18: Linia 18:
* '''trans [[''addr''] ''n'']''' - Jak wyżej, ale zamiast kodu assemblera wyświetlany jest pseudokod.
* '''trans [[''addr''] ''n'']''' - Jak wyżej, ale zamiast kodu assemblera wyświetlany jest pseudokod.
* '''mem [''block'']: ''<start>''-''<end>''''' - Wyświetl zawartość pamięci od adresu ''start'' do adresu ''end''. Jeśli nie podano bloku pamięci ''block'' wyświetlana jest zawartość bloku wskazanego przez ''Q'' i ''NB''
* '''mem [''block'']: ''<start>''-''<end>''''' - Wyświetl zawartość pamięci od adresu ''start'' do adresu ''end''. Jeśli nie podano bloku pamięci ''block'' wyświetlana jest zawartość bloku wskazanego przez ''Q'' i ''NB''
* '''clmem''' - Wyczyść zawartość całej pamięci
* '''memcl''' - Wyczyść zawartość całej pamięci
* '''memcfg''' - Pokaż sprzętową i programową konfigurację pamięci
* '''memcfg''' - Pokaż sprzętową i programową konfigurację pamięci
* '''stack''' - Pokaż stos
* '''stack''' - Pokaż stos
Linia 26: Linia 26:
** '''brk del <numer>''' - usunięcie pułapki o danym numerze
** '''brk del <numer>''' - usunięcie pułapki o danym numerze
** '''brk test <numer>''' - testowanie warunku pułapki
** '''brk test <numer>''' - testowanie warunku pułapki
** '''brk disable <numer>''' - tymczasowe wyłączenie pułapki
** '''brk off <numer>''' - tymczasowe wyłączenie pułapki
** '''brk enable <numer>''' - ponowne włączenie pułapki
** '''brk on <numer>''' - ponowne włączenie pułapki
* '''log''' - logowanie operacji emulatora do pliku
* '''log''' - logowanie operacji emulatora do pliku
** '''log''' - wyświetlenie bieżących ustawień logowania
** '''log''' - wyświetlenie bieżących ustawień logowania
Linia 33: Linia 33:
** '''log off''' - wyłączenie logowania
** '''log off''' - wyłączenie logowania
** '''log file <plik>''' - podanie zbioru, do którego zapisywany będzie log
** '''log file <plik>''' - podanie zbioru, do którego zapisywany będzie log
** '''log level <domena>:<poziom>''' - ustawienie poziomu logowania dla danej domeny. Im większy poziom logowania, tym więcej szczegółów jest logowanych. W praktyce wykorzystywane są poziomy 1-100. Dostępne domeny to:
** '''log <domena>:<poziom>''' - ustawienie poziomu logowania dla danej domeny. Im większy poziom logowania, tym więcej szczegółów jest logowanych. W praktyce wykorzystywane są poziomy 1-100. Dostępne domeny to:
*** reg - operacje na rejestrach
*** reg - operacje na rejestrach
*** mem - operacje na pamięci
*** mem - operacje na pamięci

Wersja z 12:50, 10 kwi 2013

Debugger emulatora EM400 pozwala śledzić i kontrolować stan emulowanej maszyny.

W linii poleceń debuggera można używać następujących konstrukcji:

Polecenia

Polecenia służą do sterowania pracą emulatora i debuggera oraz wyświetlania informacji o stanie emulowanej maszyny.

  • quit - Zakończ pracę emulatora
  • step [n] - Wykonaj instrukcję wskazaną przez licznik rozkazów. Jeśli opcjonalny parametr n jest obecny, wykonaj n kolejnych instrukcji.
  • run - Kontynuuj emulację
  • load <plik> [n] - Załaduj zawartość pliku do bloku pamięci n.
  • help [cmd] - Wyświetl pomoc. Jeśli opcjonalny parametr cmd jest obecny, wyświetl pomoc na temat komendy cmd.
  • regs - Wyświetl zawartość rejestrów R1-R7
  • sregs - Wyświetl zawartość rejestrów R0, IR, IC, SR
  • reset - Zresetuj emulowaną maszynę. Wpisuje 0 do wszystkich rejestrów i wskaźników.
  • dasm [[addr] n] - Wyświetl deasemblację zawartości pamięci. Jeśli żaden parametr nie został podany, deasemblowana jest instrukcja wskazana przez licznik rozkazów. Jeśli podany jest opcjonalny parametr n deasemblowanych jest n kolejnych instrukcji. Jeśli podano również parametr addr, deasemblacja rozpoczynana jest od adresu addr
  • trans [[addr] n] - Jak wyżej, ale zamiast kodu assemblera wyświetlany jest pseudokod.
  • mem [block]: <start>-<end> - Wyświetl zawartość pamięci od adresu start do adresu end. Jeśli nie podano bloku pamięci block wyświetlana jest zawartość bloku wskazanego przez Q i NB
  • memcl - Wyczyść zawartość całej pamięci
  • memcfg - Pokaż sprzętową i programową konfigurację pamięci
  • stack - Pokaż stos
  • brk - Operowanie pułapkami (breakpointami):
    • brk - wyświetlenie ustawionych pułapek
    • brk add <wyrażenie> - dodanie nowej pułapki, która jest aktywowana, gdy wyrażenie jest spełnione (różne od zera)
    • brk del <numer> - usunięcie pułapki o danym numerze
    • brk test <numer> - testowanie warunku pułapki
    • brk off <numer> - tymczasowe wyłączenie pułapki
    • brk on <numer> - ponowne włączenie pułapki
  • log - logowanie operacji emulatora do pliku
    • log - wyświetlenie bieżących ustawień logowania
    • log on - włączenie logowania
    • log off - wyłączenie logowania
    • log file <plik> - podanie zbioru, do którego zapisywany będzie log
    • log <domena>:<poziom> - ustawienie poziomu logowania dla danej domeny. Im większy poziom logowania, tym więcej szczegółów jest logowanych. W praktyce wykorzystywane są poziomy 1-100. Dostępne domeny to:
      • reg - operacje na rejestrach
      • mem - operacje na pamięci
      • cpu - operacje wykonywane przez CPU
      • int - operacje związane z przerwaniami
      • io - operacje wejścia/wyjścia
      • misc - inne
      • all - wszystkie

Wyrażenia

Wyrażenia pozwalają w linii poleceń debuggera przeprowadzać obliczenia oraz manipulować zawartością rejestrów, pamięci i zmiennych. Rezultat wyrażenia wyświetlany jest również w linii poleceń, natychmiast po jego obliczeniu. Elementem każdego wyrażenia mogą być:

  • Liczba w systemie dziesiętnym, ósemkowym, szesnastkowym lub binarnym (np.: 15, 0177, 0xffa8, 0b1011100111011110)
  • Rejestry: R0-R7, IC, IR, SR, KB oraz pseudo-rejestr MOD zawierający bieżącą wartość modyfikatora
  • Zawartość komórki pamięci, adresowane jako [adres] lub [blok:adres]
  • Zmienne: debugger pozwala na użycie dowolnej zmiennej, której nazwa nie jest słowem kluczowym (poleceniem), np: a, adres, zmienna3.

Domyślnie, liczby w linii poleceń debuggera wyświetlane są jako liczby szesnastkowe bez znaku (dane traktowane są jak liczby w kodzie U2). Możliwa jest jednak konwersja do innego zapisu:

  • uint(wyrażenie) - wartość wyrażenia zostanie potraktowana jako 16-bitowa liczba bez znaku i wyświetlona w systemie dziesiętnym
  • dec(wyrażenie) lub int(wyrażenie) - wartość wyrażenia zostanie wyświetlona w systemie dziesiętnym, ze znakiem
  • hex(wyrażenie) - wartość wyrażenia zostanie wyświetlona w systemie szesnastkowym
  • oct(wyrażenie) - wartość wyrażenia zostanie wyświetlona w systemie ósemkowym
  • bin(wyrażenie) - wartość wyrażenia zostanie wyświetlona w systemie dwójkowym

W wyrażeniach dozwolone są następujące operatory:

  • arytmetyczne: +, -, *
  • logiczne: &&, ||, !
  • bitowe: &, |, ^, ~
  • przesunięć bitowych: <<, >>
  • porównań: ==, !=, <=, >=, >, <
  • przypisania: = (lewa strona wyrażenia musi być rejestrem, zmienną lub komórką pamięci)
  • wyłuskiwania bitów: [b] i [b-e]. Wyłuskiwanie bitów pozwala na "wycięcie" z 16-bitowego słowa dowolnego ciągu bitów i użycie go jako nowej wartości, np:
    • 1[0] - najstarszy bit liczby 1 (ponieważ operacja wykonywana jest na 16-bitowej liczbie, wynikiem będzie 0)
    • r1[3] - trzeci bit rejestru r1
    • [0x7a][2-9] - bity od 2 do 9 słowa znajdującego się w bieżącym bloku pamięci pod adresem 0x7a
    • zmienna[15] - najmłodszy bit zmiennej zmienna

Debugger pozwala na obliczenie wartości wielu wyrażeń w jednej linii polecenia i wyświetlenie wyników również w jednej linii odpowiedzi. Można to zrobić podając kolejne wyrażenia oddzielone przecinkami, np:

em400> 1+2, oct(12+[9]), dec(r1-1), a=12, [a], [a]=1, [a]
0x3 033 -1 0xc 0x0 0x1 0x1