2011-10-18 10 views
9

patrzę na niektóre kodu demontażu i zobaczyć coś jak 0x01c8f09b <+0015> mov 0x8(%edx),%edi i zastanawiam się, jaka jest wartość %edx lub %edi jest. Czy można wydrukować wartość %edx lub innych zmiennych zespołu? Czy istnieje sposób wydrukowania wartości pod adresem pamięci, który wskazuje na %edx (zakładam, że edx jest rejestrem zawierającym wskaźnik do ... czegoś tutaj).Jak wydrukować rejestry demontażu w konsoli Xcode

Na przykład można wydrukować obiekt, wpisując w konsoli po, a więc czy istnieje polecenie lub składnia do drukowania rejestrów/zmiennych w zespole?

Tło:

Dostaję EXC_BAD_ACCESS na tej linii i chciałbym do debugowania, co się dzieje. Zdaję sobie sprawę, że ten błąd związany jest z zarządzaniem pamięcią i szukam odpowiedzi na pytanie, gdzie może być brakujące/zbyt wiele połączeń zatrzymujących/zwalniania/autoreasowania.

Informacje dodatkowe:

Jest na IOS, a moja aplikacja jest uruchomiona w symulatorze iPhone.

Odpowiedz

14

Można wydrukować rejestr (np eax) przy użyciu:

print $eax 

Albo w skrócie:

p $eax 

Aby wydrukować go jako szesnastkowym:

p/x $eax 

Aby wyświetl wartość wskazywaną przez rejestr:

x $eax 

Sprawdź pomocą gdb więcej szczegółów:

help print 
help x 
2

Nie są to zmienne, ale rejestry.

W GDB można zobaczyć wartości standardowych rejestrów za pomocą następującego polecenia:

info registers 

pamiętać, że rejestr zawiera wartości całkowite (32-bitowego w przypadku, gdy nazwa rejestr jest poprzedzony e) . To, co reprezentuje, nie jest znane. Może to być wskaźnik, liczba całkowita, w większości cokolwiek.

Jeśli po ulega awarii podczas próby wydrukowania wartości rejestru jako wskaźnika, prawdopodobnie wartość ta nie jest wskaźnikiem (lub błędnym).

9
(gdb) info reg 
eax   0xe 14 
ecx   0x2844e0 2639072 
edx   0x285360 2642784 
ebx   0x283ff4 2637812 
esp   0xbffff350 0xbffff350 
ebp   0xbffff368 0xbffff368 
esi   0x0 0 
edi   0x0 0 
eip   0x80483f9 0x80483f9 <main+21> 
eflags   0x246 [ PF ZF IF ] 
cs    0x73 115 
ss    0x7b 123 
ds    0x7b 123 
es    0x7b 123 
fs    0x0 0 
gs    0x33 51 

Od Debugging with gdb:

Można odwoływać się do zawartości rejestrów maszynowych, w wyrażeniach, jako zmienne o nazwach zaczynających się `$”. Nazwy rejestrów są różne dla każdej maszyny; użyj informacji o rejestrach, aby zobaczyć nazwy używane w twoim komputerze.

info registers 

druku nazwy i wartości wszystkich rejestrów wyjątkiem zmiennoprzecinkowym rejestruje (w wybranym przedziale stos).

info all-registers 

Drukuj nazwy i wartości wszystkich rejestrów, w tym zmiennoprzecinkowych rejestrów.

info registers regname ... 

Wydrukuj relatywizowaną wartość każdej określonej nazwy rejestru. regname może być dowolną nazwą rejestru obowiązującą na komputerze, którego używasz, z lub bez początkowego `$ '.

8

Zależy up, które Xcode kompilator/debugger używasz. Dla gcc/gdb to

info registers 

ale brzękiem/lldb to

register read 
4

Jeśli używasz LLDB zamiast GDB można użyć register read

Powiązane problemy