2011-10-18 13 views
9

Bazı sökme koduna bakıyorum ve 0x01c8f09b <+0015> mov 0x8(%edx),%edi gibi bir şey görüyorum ve %edx veya %edi değerinin ne olduğunu merak ediyorum.Xcode konsolunda sökme kayıtları nasıl yazdırılır

%edx veya diğer derleme değişkenlerinin değerini yazdırmanın bir yolu var mı? %edx noktasında bulunan bellek adresindeki değeri yazdırmanın bir yolu var mı? (edx'un burada bir şeye işaret eden bir kayıt olduğu varsayılıyor). Örneğin, bir objeyi konsolda po yazarak yazdırabilirsiniz, böylece derleme içindeki kayıtlar/değişkenler yazdırmak için bir komut veya sözdizimi var mı?

Geçmiş:

bu hat üzerinde EXC_BAD_ACCESS alıyorum ve ne olup bittiğini hata ayıklamak istiyorum. Bu hatanın bellek yönetimi ile ilgili olduğunun farkındayım ve nerede kalacağım/çok fazla tutma/bırakma/otomatik arama çağrılarının nerede olduğunu anlamaya çalışıyorum.

Ek Bilgi:

Bu IOS üzerinde ve benim uygulama iPhone simülatörü çalışıyor.

cevap

14

Bir kayıt yazdırabilirsiniz (örneğin eax) kullanılarak:

print $eax 

Veya kısaca:

p/x $eax 

için:

p $eax 

onaltılık olarak yazdırmak için bir kayıt tarafından işaret edilen değeri görüntüler:

x $eax 

Kontrol fazla ayrıntı için gdb yardım:

help print 
help x 
2

Bunlar değişken değil, kayıtlar. GDB olarak

, aşağıdaki komutu kullanarak standart kayıtları değerlerini görebilirsiniz: Bir kayıt tamsayı değerleri içerdiğini

info registers 

Not (sizin durumda 32bit, kayıt adı e öneki gibi) . Temsil ettiği şey bilinmemektedir. Bir işaretçi, tam sayı, çoğunlukla bir şey olabilir.

Kayıt defterinin değerini işaretçi olarak yazdırmaya çalıştığınızda po çöküyorsa, bu değer bir işaretçi (veya geçersiz olan) olmayabilir. Debugging with gdb itibaren

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 

: Sen `$' ile başlayan isimlerin ile değişken olarak, ifadelerde, makine sicil içeriğine başvurabilir

. Her makine için kayıt isimleri farklıdır; Makinenizde kullanılan adları görmek için kayıtlarını kullanın.

info registers 

Baskı kayıt (seçilen yığın çerçevede) kayan nokta dışında isimleri ve kayıt değerleri.

info all-registers 

Baskı kayan nokta kayıtları dahil tüm kayıtları adları ve değerleri,.

info registers regname ... 

Belirtilen her bir kayıt tanımlayıcısının göreli değerini yazdırın. regname, kullandığınız makinede geçerli olan herhangi bir kayıt adı olabilir, .

8

kullandığınız hangi Xcode derleyici/ayıklayıcı kadar bağlı. gcc için/yerine GDB kullanabileceğiniz bu

info registers 

ama clang var GDB/lldb sen LLDB kullanıyorsanız o

register read 
4

var register read