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.