Trong Xcode, GDB cho phép bạn thay đổi các biến cục bộ trong khi gỡ lỗi (xem cách thay đổi giá trị NSString trong khi gỡ lỗi trong XCode? ). LLDB có cung cấp một chức năng tương tự không? Nếu vậy, làm thế nào chúng ta có thể sử dụng nó?
Trong Xcode, GDB cho phép bạn thay đổi các biến cục bộ trong khi gỡ lỗi (xem cách thay đổi giá trị NSString trong khi gỡ lỗi trong XCode? ). LLDB có cung cấp một chức năng tương tự không? Nếu vậy, làm thế nào chúng ta có thể sử dụng nó?
Câu trả lời:
expr myString = @"Foo"
(lldb) giúp expr
Đánh giá biểu thức C / ObjC / C ++ trong ngữ cảnh chương trình hiện tại, sử dụng các biến hiện tại trong phạm vi. Lệnh này nhận đầu vào 'thô' (không cần trích dẫn nội dung).Cú pháp: biểu thức -
Tùy chọn lệnh Sử dụng: biểu thức [-f] [-G] [-d] [-u] - biểu thức [-o] [-d] [-u] - biểu thức
-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.
Ví dụ:
expr my_struct-> a = my_array [3]
expr -f bin - (index * 8) + 5
expr char c [] = "foo"; c [0]LƯU Ý QUAN TRỌNG: Vì lệnh này có đầu vào 'thô', nếu bạn sử dụng bất kỳ tùy chọn lệnh nào, bạn phải sử dụng '-' giữa cuối tùy chọn lệnh và đầu của đầu vào thô.
'expr' là tên viết tắt của 'biểu thức'
'expr myLabel.text = @"hello!"
nhưng tôi có một error: property 'text' not found on object of type 'UILabel *'
... Bạn có suy nghĩ gì không?
expr (void)[label setText:@"Foo"]
Hãy làm nó. Dot-Syntax thường không hoạt động trong trình gỡ lỗi. lldb có thể diễn giải nó khi bạn muốn truy cập một thành viên của c-struct, nhưng tôi không chắc đây có phải là lý do nó không hoạt động không. Dot-Syntax không hoạt động cho po
một trong hai. thay vì po label.text
bạn phải sử dụngpo [label text]
@property
.
p
như một phím tắt cho expr
. Ví dụ:(lldb) p url = @"http://google.com"
e
như một phím tắt cho expr
. BTW, p
là một bí danh cho in ấn là một bí danh cho expr --
(chỉ đánh giá đầu vào thô, không có cờ) expr -o -- [object]
hoặc po
thường cung cấp cho bạn đầu ra hữu ích hơn cho các đối tượng mặc dù.
Các công cụ sau đây làm việc cho tôi. Tôi đang sử dụng Xcode 8.
Nếu bạn muốn đặt một số biến (ví dụ: "dict") thành không và sau đó kiểm tra luồng mã, bạn có thể thử cách sau.
Nó sẽ trông giống như trong giao diện điều khiển.
(lldb) expression dict = nil
(NSDictionary *) $5 = nil