Đây là một giải pháp nữa, không quá thanh lịch như trước đây, nhưng nếu bạn không thêm các điểm dừng ngoại lệ hoặc trình xử lý, thì đó chỉ là một cách để đi.
Khi ứng dụng gặp sự cố và bạn nhận được ngăn xếp cuộc gọi ném đầu tiên (bằng số hex), hãy nhập vào bảng điều khiển Xcode info line *hex
(không quên 0x
trình xác định dấu sao và hex), ví dụ:
(gdb) info line *0x2658
Line 15 of "path/to/file/main.m" starts at address 0x25f2 <main+50>
and ends at 0x267e <main+190>.
Nếu bạn đang sử dụng lldb , bạn có thể nhập image lookup -a hex
(không có dấu sao trong tình huống này) và bạn nhận được đầu ra tương tự.
Với phương pháp này, bạn có thể di chuyển từ đỉnh ngăn xếp (sẽ có khoảng 5-7 bộ truyền ngoại lệ hệ thống) đến chức năng của bạn gây ra sự cố và xác định chính xác tệp và dòng mã.
Ngoài ra, để có hiệu quả tương tự, bạn có thể sử dụng tiện ích atos trong thiết bị đầu cuối, chỉ cần gõ:
atos -o path/to/AplicationBundle.app/Executable 0xAdress1 0xAdress2 0xAdress3 ...
và bạn nhận được dấu vết ngăn xếp được ký hiệu hóa (ít nhất là đối với các chức năng bạn có các biểu tượng gỡ lỗi). Phương pháp này được ưa thích hơn, bởi vì bạn không có cho mỗi cuộc gọi địa chỉ info line
, chỉ cần sao chép địa chỉ từ đầu ra của bàn điều khiển và dán chúng vào thiết bị đầu cuối.