2011-02-02 10 views
5

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 
+1

Đố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 đó. –

+0

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) –

+2

Hãy xem hướng dẫn này, cụ thể là ** atos **: http://www.eigo.co.uk/Deciphering-iPhone-Crash-Logs .aspx –

Trả lời

0

Tôi đã gặp phải sự cố tương tự với việc giải phóng đối tượng không được giữ lại hoặc trong hồ bơi tự động phát hành hai lần.Thường xuyên hơn là tôi sẽ không gặp sự cố cho một vị trí nằm trong khung công tác/iOS nhưng do tôi thiếu quản lý bộ nhớ phù hợp. Tôi không nói IS này xảy ra ở đây, nhưng chỉ là một cái gì đó tôi đã trải qua khi một lỗi tương tự đã trình bày chính nó.