Dalam Xcode, GDB memungkinkan Anda untuk mengubah variabel lokal saat debugging (lihat bagaimana mengubah nilai NSString saat debugging di XCode? ). Apakah LLDB menawarkan fungsi serupa? Jika demikian, bagaimana kita dapat menggunakannya?
Dalam Xcode, GDB memungkinkan Anda untuk mengubah variabel lokal saat debugging (lihat bagaimana mengubah nilai NSString saat debugging di XCode? ). Apakah LLDB menawarkan fungsi serupa? Jika demikian, bagaimana kita dapat menggunakannya?
Jawaban:
expr myString = @"Foo"
(lldb) membantu expr
Mengevaluasi ekspresi C / ObjC / C ++ dalam konteks program saat ini, menggunakan variabel yang saat ini dalam cakupan. Perintah ini mengambil input 'mentah' (tidak perlu mengutip barang).Sintaks: ekspresi -
Opsi Perintah Penggunaan: ekspresi [-f] [-G] [-d] [-u] - ekspresi [-o] [-d] [-u] - ekspresi
-G <gdb-format> ( --gdb-format <gdb-format> ) Specify a format using a GDB format specifier string. -d <boolean> ( --dynamic-value <boolean> ) Upcast the value resulting from the expression to its dynamic type if available. -f <format> ( --format <format> ) Specify a format to be used for display. -o ( --object-description ) Print the object description of the value resulting from the expression. -u <boolean> ( --unwind-on-error <boolean> ) Clean up program state if the expression causes a crash, breakpoint hit or signal.
Contoh:
expr my_struct-> a = my_array [3]
expr -f bin - (index * 8) + 5
expr char c [] = "foo"; c [0]CATATAN PENTING: Karena perintah ini mengambil input 'mentah', jika Anda menggunakan opsi perintah apa pun, Anda harus menggunakan '-' di antara akhir opsi perintah dan awal input mentah.
'expr' adalah singkatan untuk 'ekspresi'
'expr myLabel.text = @"hello!"
tapi saya mendapatkan error: property 'text' not found on object of type 'UILabel *'
... Ada pemikiran?
expr (void)[label setText:@"Foo"]
harus melakukannya. Dot-Syntax biasanya tidak akan berfungsi di debugger. lldb mungkin menafsirkannya karena Anda ingin mengakses anggota c-struct, tapi saya tidak yakin apakah ini alasannya ia tidak akan berfungsi. Dot-Syntax tidak bekerja untuk po
keduanya. alih-alih po label.text
Anda harus menggunakanpo [label text]
@property
.
p
sebagai jalan pintas untuk expr
. Contoh:(lldb) p url = @"http://google.com"
e
sebagai jalan pintas untuk expr
. BTW, p
adalah alias untuk cetak yang merupakan alias untuk expr --
(hanya menilai input mentah, tanpa bendera) expr -o -- [object]
atau po
umumnya memberi Anda hasil yang lebih berguna untuk objek.
Hal-hal berikut ini berfungsi untuk saya. Saya menggunakan Xcode 8.
Jika Anda ingin menetapkan beberapa variabel (misalnya "dict") menjadi nil dan kemudian menguji aliran kode, Anda dapat mencoba yang berikut ini.
Ini akan terlihat seperti di konsol.
(lldb) expression dict = nil
(NSDictionary *) $5 = nil