2013-08-09 38 views
12

Giả sử tôi có một biến, self.position, làm thế nào để Xcode phá vỡ bất cứ khi nào nó thay đổi giá trị của nó (một số phương pháp có thể thay đổi nó).Làm cách nào để có điểm ngắt được kích hoạt nếu một biến mẫu trong lớp có giá trị thay đổi?

+1

Nếu 'self.position' là một tài sản, thêm một phương pháp' - (void.) setPosition: (CGPoint) pos {_position = pos;} ', và thiết lập một breakpoint trong setter đó. – dasblinkenlight

+0

@dasblinkenlight Có thể xem dòng nào đã gọi bộ này không? –

+2

Tuyệt đối - mở ngăn xếp cuộc gọi và nhấp đúp vào khung hình xuống từ khung hiện tại. – dasblinkenlight

Trả lời

26

Đối với vi phạm điều kiện:

  1. Cmd + tùy chọn nhấp vào breakpoint
  2. Thêm một điều kiện nghỉ ngơi như vậy:

enter image description here

Đối với vi phạm trên tất cả các dịp giá trị đã thay đổi:

  1. Triển khai setter tầm thường (và getter vì lợi ích của mã sạch).
  2. Thêm điểm ngắt để thiết lập.

Nếu bạn muốn xem ai gọi setter - chỉ cần nhìn vào dòng tiếp theo trong stack trace (viewDidLoad trong ví dụ của tôi):

enter image description here

Cập nhật:

Thêm điểm quan sát

  1. Phá vỡ bất cứ nơi nào để các (lldb) nhắc xuất hiện trong giao diện điều khiển
  2. Gõ vào watchpoint set variable _position (thay thế _position với một Ivar bạn muốn xem)
  3. Hãy ghi nhớ số watchpoint giao cho watchpoint vừa tạo.
  4. Sửa đổi watchpoint cho phá vỡ điều kiện: watchpoint modify -c "_position < 0.5" 1 nơi biểu thức trong dấu ngoặc kép là điều kiện và số cuối cùng là số watchpoint bạn đã ghi ở # 3.
  5. Tiếp tục chạy. Bạn sẽ phá vỡ bất cứ khi nào giá trị khớp với điều kiện và bạn sẽ có thể kiểm tra khung ngăn xếp để hiểu cuộc gọi đến từ đâu.
+1

Có những thứ thú vị khác mà bạn có thể thực hiện với các điểm ngắt trong XCode. Chẳng hạn như: http://stavash.wordpress.com/2012/12/22/pimp-your-xcode-add-sound-to-breakpoints/ – Stavash

+0

Chà, thật tuyệt khi biết! Ví dụ của bạn xuất hiện để hiển thị thuộc tính. Nó có hoạt động trên các loại ivars cũng như trên các thuộc tính không? – dasblinkenlight

+0

Nó sẽ làm việc trên bất cứ điều gì được đánh giá để biểu thức bạn viết trong phạm vi cụ thể của điểm ngắt. – Stavash

5

Cách đơn giản để thực hiện là nhấp chuột phải vào biến trong cửa sổ xem và chọn tùy chọn biến đồng hồ. Xcode sau đó sẽ cảnh báo bạn khi giá trị được thay đổi.

Hoặc bạn có thể xem Key-Value Observing.

+0

Tôi cũng nghĩ KVO cũng là một lựa chọn để làm như vậy. – Exploring

2

Bạn có thể ghi đè lên các setter của position để có một breakpoint khi nó đặt biến.

+0

Có thể xem dòng nào đã gọi ra setter không? –

4

Đặt điểm ngắt biểu tượng. Chuyển đến Breakpoint Navigator, nhấp vào dấu +, nhấp vào "Thêm điểm dừng biểu tượng". Trong lĩnh vực đầu tiên, gõ - [YourSubclassNameHere setPosition:]", thêm bất kỳ khác thiết lập mà bạn muốn, sau đó nhấp vào bên ngoài hộp thoại