Bản đổ vỡ trên iTunesConnect cho ứng dụng XCode 3.2.5 được xây dựng của tôi hiển thị tên phương thức, nhưng không hiển thị số dòng. Ví dụ, trong báo cáo tai nạn rút gọn tôi đã dán ở bên dưới, nó cho thấy điều này:iTunesConnect crashlog là một phần tượng trưng; không hiển thị số dòng
0x000f5ef8 -[MyTableViewController dealloc] + 120
Có hai điều ở đây được đánh đố tôi, khi mà tôi muốn đánh giá cao một số cái nhìn sâu sắc. Đầu tiên là tại sao tệp .crash thô đến từ iTunesConnect đã được biểu tượng một phần: nó hiển thị tên lớp và phương thức, nhưng không phải là tệp mã nguồn và số dòng. Tôi mong đợi bản đổ vỡ iTunesConnect thô hiển thị chỉ các địa chỉ thập lục phân. Như tôi đã hiểu, chỉ khi tôi tải xuống bản ghi sự cố vào hệ thống cục bộ của mình và ràng buộc nó một cách rõ ràng bằng công cụ thích hợp (XCode Organizer, symbolicatecrash, atos, lệnh gdb x/i, v.v.) và các tệp nhị phân và dSYM ứng dụng chính xác (những người có UUID phù hợp), tôi sẽ thấy các biểu tượng đầy đủ của lớp, phương thức, tệp mã nguồn và số dòng. Ngay cả khi tôi tải xuống và xem crashlog trên một hộp Windows, nó xuất hiện một phần tượng trưng. Tôi lo ngại rằng phân phối nhị phân của tôi phải phải bao gồm một số biểu tượng gỡ lỗi để thông tin này hiển thị trong crashlog thô, mặc dù có "Strip Linked Project" được đặt trong cài đặt Nhắm mục tiêu phân phối của nó. Bất kỳ thông tin chi tiết nào ở đây đều tuyệt vời.
Điều thứ hai làm tôi bối rối, và là mối quan tâm ngay lập tức với tôi trong việc sửa lỗi vụ tai nạn cao cấp này, là việc kinh doanh bù đắp này. Tôi đã định vị rất cẩn thận dSYM và ứng dụng nhị phân với UUID phù hợp, đặt chúng vào thư mục chính của tôi để chúng có thể được tìm thấy bởi Spotlight và cộng sự, và bất kể tôi làm gì, tôi không thể chuyển đổi bù đắp đó [MyTableViewController dealloc] + 120
thành nguồn tệp mã (được biết đến với tôi là MyTableViewController.m) và một số dòng. Tôi đã thử các thủ thuật sau đây với tệp raw iTunesConnect .crash:
- XCode Organizer: "biểu tượng" của nó không ảnh hưởng đến thay đổi đối với crashlog - nó giống nhau.
- symbolicatecrash: Nó không thực sự phàn nàn về bất cứ điều gì trong chế độ tiết, và bản ghi đầu ra là giống nhau
- gdb: Sử dụng cùng một cài đặt gdb và -arch mà XCode 3.2.5 sử dụng để tạo bản phân phối và nạp trong các biểu tượng nhị phân và dSYM ứng dụng phù hợp trên mỗi this post, lệnh gdb 'x/i' và 'dòng thông tin *' cho tôi biết rằng
[MyTableViewController dealloc] + 120
tương ứng với một đoạn mã hoàn toàn không liên quan trong một tệp hoàn toàn khác - tệp .h, cũng! Ngỗng ngỗng hoang dã.
Có gì đó không có ở đây. Mặc dù đảm bảo chính xác UUID trên báo cáo sự cố, tệp nhị phân ứng dụng và tệp dSYM ... không công cụ nào có thể mang lại số dòng thực tế và thực hiện theo cách cấp thấp gửi cho tôi một cuộc săn ngỗng hoang dã. Biết số dòng chính xác là rất quan trọng để sửa lỗi này, bởi vì chúng tôi không thể tái tạo sự cố này trong nhà nên chúng tôi đang bay mù tại đây. Điều này có vẻ là một đối tượng được phát hành quá đơn giản, nhưng không rõ đối tượng chính xác của nó là gì và chúng tôi không thể nói từ ngữ cảnh. Tôi tự hỏi nếu có một số thiết lập XCode bị chiếm đoạt không đúng cách đó là bằng cách nào đó phá vỡ quá trình biểu tượng.
Cảm ơn bạn đã dành thời gian!
Nội dung sau là nhật ký .crash thô thô từ iTunesConnect.
Incident Identifier: 09EAE058-7D55-4AE5-947A-17280FB0211A
Hardware Model: iPhone3,1
Process: MyApp [1895]
Path: /var/mobile/Applications/B4B872EF-CB0D-41D7-A7B5-435ADE479D0A/MyApp.app/MyApp
Identifier: MyApp
Version: ??? (???)
Code Type: ARM (Native)
Parent Process: launchd [1]
Date/Time: 2011-01-24 14:06:32.941 -0500
OS Version: iPhone OS 4.2.1 (8C148)
Report Version: 104
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0xd0000000
Crashed Thread: 0
Thread 0 Crashed:
0 libobjc.A.dylib 0x33479466 objc_msgSend + 18
1 MyApp 0x000f5ef8 -[MyTableViewController dealloc] + 120
2 CoreFoundation 0x33a26f74 -[NSObject(NSObject) release]
3 libobjc.A.dylib 0x3347a812 objc_setProperty
4 UIKit 0x320bb4a0 -[UINavigationController setDisappearingViewController:]
5 UIKit 0x320bb478 -[UINavigationController _clearLastOperation]
xx SNIP xx
23 MyApp 0x00014eac main + 36
24 MyApp 0x0000b324 start + 44
XX SNIP xx
Binary Images:
0x1000 - 0x1e3fff +MyApp armv7 <5570f8eee3bc11647732c12f96fe9553> /var/mobile/Applications/B4B872EF-CB0D-41D7-A7B5-435ADE479D0A/MyApp.app/MyApp
Đối với câu hỏi đầu tiên, tên lớp/phương thức Obj-C được nhúng vào trong tệp nhị phân (vì chúng phải, để thời gian chạy hoạt động). Điều này có nghĩa là ngay cả khi không có .dSYM, một bản ghi sự cố vẫn có thể được biểu tượng một phần để hiển thị tên phương thức và lệnh dời vào các phương thức đó. –
Phương pháp cụ thể mà bạn gặp phải có thể chỉ là lệnh gọi '-release', nhưng nếu bạn muốn xác minh, bạn có thể thử làm theo hướng dẫn trong [Vì vậy, bạn đã bị rơi vào objc_msgSend()] (http: //www.sealiesoftware. com/blog/archive/2008/09/22/objc_explain_So_you_crashed_in_objc_msgSend.html) –
Hãy xem hướng dẫn này, cụ thể là ** atos **: http://www.eigo.co.uk/Deciphering-iPhone-Crash-Logs .aspx –