2012-10-13 25 views
10

Tôi muốn thoát ra khỏi phương pháp hiện tại mà tôi đang bước qua."trở về" từ phương pháp trong khi bước?

-(void)helloWorld { 
    NSLog(@"Hello"); 
    // I would like to return here, so that "World" isn't printed. 
    NSLog(@"World"); 
} 

Tôi đã thử những điều sau, nhưng không có may mắn.

(lldb) expr return 
<no result> 

Điều này có thể thực hiện với lldb không?

Trả lời

6

Khi bạn đang gỡ lỗi bằng cách sử dụng Xcode và khi chương trình của bạn bị tạm dừng tại điểm ngắt, bạn có thể kéo mũi tên màu xanh nhỏ đến bất kỳ dòng nào khác trong hàm. Ví dụ. trong đoạn mã sau:

Xcode breakpoint

nếu tôi muốn bỏ qua NSLog(@"B"), tôi có thể chỉ cần kéo vào mũi tên màu xanh lá cây từ dòng 20 đến dòng 23, có nghĩa là chức năng sẽ chỉ đơn giản là "trở lại" từ bất cứ nơi nào tôi muốn.

+1

Tôi đã thấy một số người báo cáo rằng theo LLDB và ARC, kéo máy tính đến một vị trí mới có thể gây ra sự cố. Hiện vẫn còn một số kinks được làm việc ra ngoài. Ngoài ra, nếu bạn đã quen thuộc với GDB, nhưng không phải là LLDB, hãy lưu một bản sao của bảng lừa đảo này: http://lldb.llvm.org/lldb-gdb.html –

+0

Vâng, nói chung kéo máy xung quanh là rất nguy hiểm trừ khi bạn hiểu tất cả các phân bổ thời gian/bộ nhớ/khởi tạo đang diễn ra đằng sau hậu trường. Nếu bạn có một loạt các câu lệnh đơn giản, bạn thường có thể thoát khỏi nó, nhưng bất cứ điều gì phức tạp hơn và nó đầy những bí mật ẩn. –

17

Thật không may trong Xcode 4.5.x không có cách nào để buộc trả lại sớm từ một hàm. Trong các nguồn lldb hiện tại tại http://lldb.llvm.org/ có một lệnh mới được thêm vào, thread return, thực hiện những gì bạn muốn - nó bao gồm khả năng xác định giá trị trả về của hàm. Tuy nhiên, điều này sẽ không có trong Xcode cho đến bản phát hành chính tiếp theo.

+7

Trong Xcode 6 'thread return' hoạt động ra khỏi hộp – fabb

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