2013-08-19 12 views
12

Używam Xcode i chciałbym ustawić punkt przerwania, który mówi NSString z mojego kodu. To, co robię, to ustawianie punktu przerwania, a następnie jego edycja. Dodaję akcję "Polecenie powłoki". Pierwszy argument to say, a drugim argumentem jest to, że mam problem.Używanie polecenia Say w punkcie przerwania w Xcode

NSString *myString = @"This is a test"; 

Jeśli kładę @[email protected] jako drugi argument, to odczytuje adres pamięci. dawny. 0x0b4be130

Jeśli spróbuję użyć @[myString UTF8String], otrzymam inny adres pamięci.

Jeśli usuniemy zaznaczenie myString, @*[myString UTF8String]@, otrzymam tylko pierwszy znak ciągu.

Jak zrobić to poprawnie?

Odpowiedz

12

LLDB ma wbudowany interpreter języka Python z całą biblioteką LLDB. Możesz uzyskać do niego dostęp za pomocą komendy debuggera script. Dzięki temu łatwiej możemy pobrać ciąg znaków reprezentujący zmienną w ramce i wysłać ją do polecenia systemu operacyjnego. Dodaj działanie debugera:

script os.system("say " + lldb.frame.GetValueForVariablePath("myVariable").description) 

, aby osiągnąć to, co chcesz. Możesz nawet owijać skrypty Pythona jako nowe "komendy" LLDB, więc możesz utworzyć polecenie debuggera o nazwie say, które jawnie określa opis ukrytych obiektów; spójrz na http://lldb.llvm.org/python-reference.html, aby uzyskać wprowadzenie na temat ustawiania tego typu skryptów.

Powiązane problemy