2013-08-01 30 views
5

Tôi đã tạm dừng ứng dụng của mình và thử in một thứ gì đó lên bảng điều khiển. (ví dụ: po foo()). Sau khi làm như vậy, tôi nhận được thông báo sau:"Thực hiện bị gián đoạn, lý do: điểm ngắt" khi cố in một thứ gì đó từ bảng điều khiển Xcode

error: Execution was interrupted, reason: breakpoint 2.1.
The process has been returned to the state before execution.

Tuy nhiên, không có điểm ngắt trong chức năng đó. Tại sao nó cho tôi thấy lỗi này và không thực hiện chức năng?

Đây là trên Xcode 4.6.

Trả lời

5

Hóa ra điểm ngắt trong câu hỏi (2.1) là điểm ngắt Tất cả ngoại lệ. Phương pháp mà tôi đã gọi là đưa ra một ngoại lệ, khiến cho điểm ngắt Tất cả ngoại lệ bị tấn công. po sẽ ngừng thực hiện sau khi đạt đến điểm ngắt (xem this answer để biết thêm thông tin).

Nếu bạn vô hiệu hóa tất cả các trường hợp ngoại lệ breakpoint và chạy nó một lần nữa, nó là rõ ràng hơn rằng có một ngoại lệ:

error: Execution was interrupted, reason: signal SIGSTOP. 
The process has been returned to the state before execution. 

Nếu bạn luôn luôn rời khỏi tất cả các trường hợp ngoại lệ breakpoint được kích hoạt, sau đó được thông báo có thể mơ hồ: nó đã đạt đến một điểm dừng vì có thực sự là một điểm dừng ở đâu đó dọc theo con đường thực hiện, hay là một ngoại lệ được nâng lên?

Giải pháp thay thế (không yêu cầu vô hiệu hóa điểm ngắt Tất cả ngoại lệ) là sử dụng expr thay vì po (xem liên kết ở trên để biết mô tả về các cờ sau).

Chạy expr -u 0 -o -- foo() xuất ra như sau:

error: Execution was interrupted, reason: breakpoint 2.1 -2.1. 
The process has been left at the point where it was interrupted. 
* thread #1: tid = [...] libobjc.A.dylib`objc_exception_throw, stop reason = breakpoint 2.1 -2.1 
    frame #0: [...] libobjc.A.dylib`objc_exception_throw 

Chuỗi objc_exception_throw là một gợi ý rằng một exception was raised.

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