2011-02-01 35 views
42

Khi tôi dừng lại ở điểm ngắt trong XCode, tôi có thể thấy giá trị của các biến NSString. Làm thế nào tôi có thể thay đổi chúng? Tôi có thể thay đổi các biến int hoặc double, nhưng không thay đổi NSString.cách thay đổi giá trị NSString trong khi gỡ lỗi trong XCode?

+0

vào năm 1987, chúng tôi có thể dễ dàng sử dụng tương đương với "Giá trị chỉnh sửa" của Xcode trong tất cả các trình gỡ lỗi * thực *. Bây giờ chúng tôi đang xuống hạng để viết mã trình gỡ lỗi ... Quay lại Tương lai ... –

Trả lời

78

Bạn có thể thực hiện việc này trong bảng điều khiển gỡ lỗi. Giả sử bạn có NSString* myVar. Trong bảng điều khiển, sau (gdb), nhập set myVar = @"My new string". Nếu bạn đang sử dụng (lldb), thì hãy sử dụng biểu thức tương đương expr myVar = @"My new string" để thay thế.

Điều này có thể không hiển thị chính xác trong bảng biến, nhưng bạn có thể xác minh giá trị bằng cách nhập po myVar vào bảng điều khiển. Mã của bạn sẽ nhận giá trị mới.

Đối với một số thông tin tuyệt vời về việc sử dụng expr, hãy kiểm tra this StackOverflow post.

+0

Điều này không hoạt động đối với tôi trong XCode 4.3.1 bằng cách sử dụng (lldb). Tôi nhận được lỗi về "tham chiếu đến 'id' là mơ hồ" và "1 lỗi phân tích biểu thức". – funroll

+2

Bạn đang nhấn một biến thể của một lỗi đã biết trong XCode 4.3.x. Xem [bài đăng này] (http://stackoverflow.com/questions/9515630/lldb-fails-to-print-variable-values-with-error-reference-to-id-is-ambiguous). Theo câu trả lời, điều này được giải quyết trong XCode 4.4 – MikeG

+0

Sử dụng expr whateverVariable = @ "55fc633a22570e2b7e00003b" làm việc cho tôi. – finneycanhelp

7

Bạn có thể nhưng bạn phải gọi mã từ dấu nhắc lệnh debugger. Ví dụ, nói rằng bạn có một đám cháy breakpoint tắt ngay sau khi dòng này:

NSString *myString = @"My current string"; 

Sau đó tại (gdb) loại dấu nhắc:

call myString = @"My new string" 

Bạn có thể po myString trước khi thay đổi chuỗi và sau khi bạn thay đổi nó để xác minh rằng nó đã thay đổi.

Ví dụ khác: Giả sử bạn muốn thay đổi tiêu đề của trình điều khiển chế độ xem. Bạn có thể sử dụng setter. * Lưu ý: ký hiệu chấm không được hỗ trợ tại dòng lệnh của trình gỡ rối. Ví dụ: để cho phép tải xem và sau đó thiết lập một điểm dừng ở đâu đó trong suốt thời gian tồn tại của bộ điều khiển xem của bạn. Sau đó, hãy thực hiện việc này:

call (id)[self setTitle:@"New Title"] 

Tiếp tục chạy chương trình và bạn sẽ thấy cập nhật tiêu đề của bộ điều khiển chế độ xem của bạn.

+4

Câu trả lời của tôi là cũ. Bạn có thể thực sự thực hiện việc này ngay bây giờ: ** po myString = @ "my_new_string" ** và ** po self.title = @ "Tiêu đề mới" ** – n8tr

2

Đối NSError Tôi đang sử dụng này:

(lldb) expression aTempError = (NSError*)[[NSError alloc] initWithDomain:@"MANO" code:1 userInfo:nil] 
1

(https://stackoverflow.com/users/1202867/n8tr) bình luận n8tr từ trên cho thấy làm thế nào để làm điều đó. Bạn chỉ cần đứng trước bài tập của bạn với "po" như vậy: po myString = @ "my_new_string" và po self.title = @ "New Title".

+0

Tính năng này hoạt động trong Xcode 6.3.2. – Huperniketes

Các vấn đề liên quan