2012-11-10 12 views
7

Tôi nhận được (trong ITC) bên dưới trình bày báo cáo sự cố cho ứng dụng Mac App Store đầu tiên của tôi. Sử dụng kiến ​​thức được tạo trên Stackoverflow Tôi đã cố gắng biểu tượng nhật ký này, nhưng (sử dụng atos và otool) Tôi chỉ có thể đọc dòng cuối cùng (20) (có nghĩa là start (in My App) + 52. Tôi thực sự không biết cách diễn giải các dòng ở trên và làm thế nào để tìm nguyên nhân của vụ tai nạn.Cách hiểu nhật ký sự cố này

Process:   My App [270] 
Identifier:  com.mycompany.myapp 
Version:   1.0.0 (1.0.0) 
App Item ID:  568750000 
App External ID: 11410000 
Code Type:  X86-64 (Native) 
Parent Process: launchd [143] 
User ID:   501 

Date/Time:  2012-11-07 19:21:11.365 -0200 
OS Version:  Mac OS X 10.8.2 (12C60) 
Report Version: 10 

Per-App Interval Since Last Report: 1232 sec 
Per-App Crashes Since Last Report: 1 

Crashed Thread: 0 Dispatch queue: com.apple.main-thread 

Exception Type: EXC_BAD_ACCESS (SIGSEGV) 
Exception Codes: EXC_I386_GPFLT 


Thread 0 Crashed:: Dispatch queue: com.apple.main-thread 
0 libobjc.A.dylib     0x00007fff877a5256 objc_msgSend + 22 
1 com.apple.AppKit    0x00007fff8dac6e27 -[NSOutlineView _delegate_isGroupRow:] + 66 
2 com.apple.AppKit    0x00007fff8da46878 -[NSTableView _isGroupRow:] + 81 
3 com.apple.AppKit    0x00007fff8da41fad -[NSTableView _isSourceListGroupRow:] + 56 
4 com.apple.AppKit    0x00007fff8da418e8 -[NSTableView rectOfRow:] + 288 
5 com.apple.AppKit    0x00007fff8da5b3cb _NSTVVisibleRowsForUpdate + 296 
6 com.apple.AppKit    0x00007fff8da5aa85 -[NSTableRowData _unsafeUpdateVisibleRowEntries] + 96 
7 com.apple.AppKit    0x00007fff8da5a8a1 -[NSTableRowData updateVisibleRowViews] + 119 
8 com.apple.AppKit    0x00007fff8da6e463 -[NSTableRowData _idleUpdateVisibleRows] + 66 
9 com.apple.CoreFoundation  0x00007fff87547da4 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 20 
10 com.apple.CoreFoundation  0x00007fff875478bd __CFRunLoopDoTimer + 557 
11 com.apple.CoreFoundation  0x00007fff8752d099 __CFRunLoopRun + 1513 
12 com.apple.CoreFoundation  0x00007fff8752c6b2 CFRunLoopRunSpecific + 290 
13 com.apple.HIToolbox    0x00007fff830a30a4 RunCurrentEventLoopInMode + 209 
14 com.apple.HIToolbox    0x00007fff830a2e42 ReceiveNextEventCommon + 356 
15 com.apple.HIToolbox    0x00007fff830a2cd3 BlockUntilNextEventMatchingListInMode + 62 
16 com.apple.AppKit    0x00007fff8d8d8613 _DPSNextEvent + 685 
17 com.apple.AppKit    0x00007fff8d8d7ed2 -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 128 
18 com.apple.AppKit    0x00007fff8d8cf283 -[NSApplication run] + 517 
19 com.apple.AppKit    0x00007fff8d873cb6 NSApplicationMain + 869 
20 com.mycompany.myapp    0x000000010f29ce1c 0x10f29b000 + 7708 
+0

Đó là lỗi phân đoạn, có thể không xảy ra trong một trong các phương pháp của bạn. Do đó, bạn đã rời khỏi chế độ xem bảng ở trạng thái không nhất quán. –

+0

Cảm ơn sự giúp đỡ của bạn, nhưng tôi có một số lượng lớn TableView và OutlineView trong ứng dụng của mình. Nếu không xác định được cửa sổ, báo cáo này hoàn toàn không thể sử dụng được cho tôi (giống như các báo cáo khác từ osx :() –

Trả lời

38

Reading khung stack mà không phải là trong mã của bạn thường xuyên giáp đọc lá trà, nhưng trong trường hợp này, nó khá rõ ràng những gì đã xảy ra.

tôi sẽ để đọc nhật ký sự cố của bạn cho bạn, dịch như tôi đi cùng.

Ngăn xếp tôi s xây dựng từ dưới lên (giống như ngăn xếp trong thế giới thực). Tôi sẽ cắt theo đuổi:

10 com.apple.CoreFoundation  0x00007fff875478bd __CFRunLoopDoTimer + 557 
9 com.apple.CoreFoundation  0x00007fff87547da4 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 20 

Một giờ bị sa thải.

8 com.apple.AppKit    0x00007fff8da6e463 -[NSTableRowData _idleUpdateVisibleRows] + 66 
7 com.apple.AppKit    0x00007fff8da5a8a1 -[NSTableRowData updateVisibleRowViews] + 119 
6 com.apple.AppKit    0x00007fff8da5aa85 -[NSTableRowData _unsafeUpdateVisibleRowEntries] + 96 
5 com.apple.AppKit    0x00007fff8da5b3cb _NSTVVisibleRowsForUpdate + 296 

Trong giờ này (mà có lẽ đó là thiết lập để bắn trong thời gian nhàn rỗi), xem bảng cố gắng để cập nhật kiến ​​thức của mình trong đó hàng có thể nhìn thấy.

(Khung cuối cùng là một trong đó làm rõ rằng nó cập nhật hàng có thể nhìn thấy, không cập nhật các hàng có thể nhìn thấy. Bạn có thể nói điều này từ cách diễn đạt của tên của chức năng.)

4 com.apple.AppKit    0x00007fff8da418e8 -[NSTableView rectOfRow:] + 288 

Để xác định xem hàng có hiển thị hay không, khung nhìn cần tìm ra nơi hàng nằm trong giới hạn của nó (có lẽ là giao cắt với hình chữ nhật có thể nhìn thấy trong chế độ xem cuộn).

Hướng tới mục tiêu đó, xem bảng đang cố gắng tìm ra các đặc điểm của dòng này:

3 com.apple.AppKit    0x00007fff8da41fad -[NSTableView _isSourceListGroupRow:] + 56 

nó có phải là một nhóm hàng danh sách nguồn?

2 com.apple.AppKit    0x00007fff8da46878 -[NSTableView _isGroupRow:] + 81 

Có bất kỳ nhóm hàng ở tất cả?

1 com.apple.AppKit    0x00007fff8dac6e27 -[NSOutlineView _delegate_isGroupRow:] + 66 

Hãy hỏi các đại biểu.

0 libobjc.A.dylib     0x00007fff877a5256 objc_msgSend + 22 

Cố gắng để gửi một tin nhắn. Đây là nơi quy trình của bạn bị lỗi.

Vì vậy, sự cố xảy ra trong khi chế độ xem phác thảo đang cố gắng gửi thư đến đại biểu của nó.

Từ đó, chúng ta có thể lấy được ba sự kiện:

  1. Quan điểm trong câu hỏi là một cái nhìn phác thảo, không phải là một bảng điểm không phác thảo. (Khung # 1 chứng minh điều này. Một cái nhìn bảng thông thường không phải là một NSOutlineView.) Điều này một mình có thể xác định xem có liên quan, nhưng nếu nó không, không biggie, bởi vì chúng tôi có một thực tế có thể thu hẹp nó xuống.
  2. Chế độ xem phác thảo được đề cập có một đại biểu. Điều này một mình có thể xác định xem phác thảo có liên quan, nhưng nếu nó không, không biggie, bởi vì vấn đề không phải là với xem ở tất cả.
  3. Vấn đề là đối tượng đại diện của lượt xem không đủ sở hữu. Nó chết sớm trước khi xem phác thảo có thể gửi nó thông điệp chúng ta đã thấy trong dấu vết ngăn xếp.

Sử dụng mẫu Zombies của dụng cụ để xác định xem đối tượng nào đang cố gắng nói chuyện và xem lịch sử của đối tượng đó để tìm bản phát hành quá mức hoặc không cân bằng đã giết nó. Có thể bạn cần thêm quyền sở hữu mạnh đối tượng đó vào một nơi nào đó.

+0

Tôi thực sự cảm ơn vì lời giải thích ấn tượng của bạn, điều này cho phép tôi hiểu rõ hơn về nhật ký này. –

+4

Peter, đây là một trong những bài viết hữu ích nhất mà tôi từng gặp! Đây chính xác là những gì đã xảy ra với tôi, tuy nhiên chỉ với một cái nhìn đơn giản, thay vì một cái nhìn phác thảo. đại biểu của bảng xem của tôi và nguồn dữ liệu để nil trước khi cho phép ARC phát hành điều khiển xem của tôi –

+0

Tôi đã không có manh mối '_delegate_' mạnh trong ngăn xếp của tôi theo dõi nhưng nó đã kết thúc được các vấn đề đại biểu. chuyển hướng ngăn xếp và thiết lập nó như là đại biểu của thanh tab.Sau đó, tôi quên để thiết lập các đại biểu để nil trước khi tôi popped rằng điều khiển xem.Sau đó, khi tôi khai thác trên thanh tab, bùng nổ, bởi vì nó buộc để truy cập vào một bộ điều khiển xem tha t không còn tồn tại nữa. Đối với tôi nó là kỳ lạ mà không có một ngoại lệ ném trong những trường hợp này. –