Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Symbole umożliwiają bezpośrednie manipulowanie tokenami używanymi przez debugowany program. Na przykład można ustawić punkt przerwania w funkcji głównej za pomocą polecenia bp main lub wyświetlić zmienną całkowitą MyInt za pomocą polecenia dd MyInt L1.
W wielu przypadkach symbole mogą być używane jako parametry w poleceniach debugera. Jest to obsługiwane w przypadku większości parametrów liczbowych i jest również obsługiwane w niektórych parametrach tekstowych. Oprócz ogólnych reguł składni symboli istnieją również reguły składni symboli, które mają zastosowanie w każdym z tych przypadków.
Ogólne reguły składni symboli
Nazwa symbolu składa się z co najmniej jednego znaku, ale zawsze zaczyna się od litery, podkreślenia (_), znaku zapytania (?) lub znaku dolara ($).
Nazwa symbolu może być kwalifikowana przez nazwę modułu. Wykrzyknik (!) oddziela nazwę modułu od symbolu (na przykład mymodule!main). Jeśli nie jest używana żadna nazwa modułu, symbol nadal może być poprzedzony wykrzyknikiem. Użycie wykrzyknika bez nazwy modułu może być szczególnie przydatne, nawet w przypadku zmiennych lokalnych, aby wskazać polecenie debugera, że parametr jest nazwą, a nie numerem szesnastkowym. Na przykład zmienna fade będzie odczytywana przez polecenie dt (Display Type) jako adres, chyba że jest poprzedzona wykrzyknikiem lub jest używana opcja -n. Jednak aby określić, że symbol jest lokalny, poprzedzić go znakiem dolara ( $ ) i wykrzyknikiem ( ! ), jak w $!lime.
Nazwy symboli są całkowicie bez uwzględniania wielkości liter. Oznacza to, że obecność obiektu myInt i MyInt w programie nie będzie poprawnie rozumiana przez debugery; każde polecenie, które odwołuje się do jednego z nich, może uzyskać dostęp do drugiego, niezależnie od tego, jak polecenie jest napisane pod względem wielkości liter.
Składnia symboli w wyrażeniach liczbowych
Debuger rozumie dwa różne rodzaje wyrażeń: wyrażenia Microsoft Macro Assembler (MASM) i wyrażenia języka C++. Jeśli chodzi o symbole, te dwie formy składni różnią się w następujący sposób:
W wyrażeniach MASM każdy symbol jest interpretowany jako adres. W zależności od tego, co odnosi się do symbolu, będzie to adres zmiennej globalnej, zmiennej lokalnej, funkcji, segmentu, modułu lub innej rozpoznanej etykiety.
W wyrażeniach języka C++ każdy symbol jest interpretowany zgodnie z typem. W zależności od tego, co odnosi się do symbolu, może być interpretowany jako liczba całkowita, struktura danych, wskaźnik funkcji lub dowolny inny typ danych. Symbol, który nie odpowiada typowi danych języka C++ (na przykład niezmodyfikowanej nazwie modułu), spowoduje błąd składniowy.
Aby uzyskać wyjaśnienie, kiedy i jak używać każdego typu składni, zobacz Ocena wyrażeń.
Jeśli używasz składni wyrażenia MASM, każdy symbol, który może być interpretowany jako liczba szesnastkowa lub jako rejestr (np. BadFeed, ebX) powinien być zawsze poprzedzony wykrzyknikiem. Dzięki temu debuger rozpoznaje go jako symbol.
Za pomocą polecenia ss (Ustaw sufiks symbolu) można ustawić sufiks symbolu. Spowoduje to, że debuger automatycznie dołączy "A" lub "W" do dowolnej nazwy symbolu, której nie może odnaleźć w inny sposób.
Wiele procedur Win32 istnieje zarówno w wersjach ASCII, jak i Unicode. Te procedury często mają "A" lub "W" dołączane odpowiednio na końcu ich nazw. Użycie sufiksu symboli ułatwi debugerowi wyszukiwanie tych symboli.
Dopasowywanie sufiksów nie jest domyślnie aktywne.
Składnia symboli w wyrażeniach tekstowych
Symbole mogą być używane w parametrach tekstowych niektórych poleceń — na przykład bm (Ustaw punkt przerwania) i x (Zbadaj symbole).
Te parametry tekstowe obsługują różne symbole wieloznaczne i specyfikatory. Aby uzyskać szczegółowe informacje, zobacz Składnia symboli wieloznacznych ciągów . Oprócz standardowych symboli wieloznacznych w ciągach, wyrażenie tekstowe używane do określania symbolu może być poprzedzone wiodącym znakiem podkreślenia. Podczas dopasowywania tego do symbolu debuger będzie traktować to jako dowolną liczbę znaków podkreślenia, nawet zero.
Sufiks symbolu nie jest używany podczas dopasowywania symboli w wyrażeniach tekstowych.