2015-04-16 16 views
11

Làm thế nào tôi có thể tự động thiết lập điểm ngắt trên tất cả các phương thức trong một lớp Objective C bằng cách sử dụng lldb?Điểm ngắt lldb trên tất cả các phương pháp trong mục tiêu lớp c

Điều này rất hữu ích cho việc học hành vi của một lớp kế thừa phức tạp. Tôi đang sử dụng Xcode (bao gồm lldb) cho iOS phát triển, và nó là cồng kềnh để tự đi qua (lớn) tập tin trong Xcode và nhấp vào máng xối bên cạnh mỗi phương pháp để thiết lập các điểm ngắt.

Trả lời

17

Một tùy chọn là sử dụng điểm ngắt regex.

breakpoint set -r '\[ClassName .*\]$' 

Bạn có thể chơi với regexp để phù hợp với nhu cầu của mình.

Lệnh sẽ tạo điểm ngắt dừng trên tất cả các phương thức triển khai bởi lớp đó. Tuy nhiên, sẽ không có điểm ngắt trên các phương thức được kế thừa từ các lớp bậc trên.

Để nhận các phương thức trên lớp cha, bạn sẽ phải sử dụng điểm ngắt có điều kiện. Ví dụ, nếu lớp cha là UIViewController, bạn có thể làm một cái gì đó như:

br s -r '\[UIViewController .*\]$' -c '(BOOL)[(id)$arg1 isKindOfClass:[CustomVC class]]' 

cho x86 thay đổi (id)$arg1 để *(id*)($ebp+8).

Cuối cùng, nếu bạn thực sự muốn tìm hiểu về luồng điều khiển thông qua các lớp khác nhau, hãy xem dtrace. Nó có thể phù hợp hơn với điều này hơn là một trình gỡ lỗi.

+0

Tôi nhầm lẫn ý bạn là gì bởi '\ [ClassName (\ (. * \)). * \] $', Tuy nhiên '\ [FooViewController. * \] $' Đã thực hiện thủ thuật cho tôi. Tôi cũng thích rằng bỏ qua các điểm ngắt $ gây ra trên các khối quá. Regex để phá vỡ các phương thức siêu lớp cũng tốt. Cảm ơn những lời khuyên, và tôi sẽ chắc chắn để kiểm tra dtrace. – tboyce12

+0

Phải có '?' Sau '(\ (. * \))'. Phần đó là để so khớp các danh mục, ví dụ: '- [UIView (Hình học) setFrame:]'. Tôi sẽ lấy nó ra vì nó không cần thiết. –

+0

Tôi viết lệnh này ở đâu. Vui lòng đề xuất Trên bảng điều khiển hoặc trên thiết bị đầu cuối hoặc trong mã. – Chandni

3
br se -f FooViewController.m -p '^@property|^ *- *\(' 

"br se" là viết tắt của "bộ breakpoint", vượt qua tên tập tin của riêng bạn để lập luận -f, và lập luận -p là một regex thô đối với tài sản và phương pháp trong Objective C.

Hãy cẩn thận : Điều này dường như không hoạt động với các tệp .h, vì vậy nếu bạn có thuộc tính được khai báo trong tiêu đề mà bạn muốn xem thì bạn có thể cần phải đặt các điểm trên biến thể hiện sao lưu của chúng.

Đây là giải pháp tốt nhất mà tôi đã tìm thấy cho đến nay, vui lòng đăng các giải pháp thay thế nếu bạn cho rằng chúng sẽ hữu ích.

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