2011-10-06 9 views
29

Tôi có báo cáo sự cố từ BugSense, vì vậy tôi có thông tin về vị trí bộ nhớ bị treo nhưng chúng không mang tính biểu tượng. Ngoài ra Bug Sense không gửi báo cáo sự cố truyền thống nhưng vẫn mang lại cho tôi một lỗi. Vì vậy, tôi đang cố gắng sử dụng Atos để có được vị trí chính xác của các sự cố của tôi. Tôi đã lưu trữ ứng dụng trong XCode 4 và sử dụng phiên bản đó để gửi tới kho ứng dụng, vì vậy tôi có tệp dSYM. Tôi đã chạy đoạn mã sau:Atos không thể nhận được biểu tượng từ dSYM của ứng dụng đã lưu trữ

atos -arch armv7 -o MyApp.app.dSYM 0x001057e9 

Tuy nhiên, thay vì nhận được đầu ra thích hợp, tôi nhận được một lỗi:

atos cannot load symbols for the file MyApp.app.dSYM for architecture armv7 

Bất kỳ lời đề nghị như tại sao điều này có thể xảy ra? Tôi không loại bỏ các biểu tượng gỡ lỗi khỏi ứng dụng.

Trả lời

86

Để có được đúng ký tự từ tập tin dSYM ứng dụng lưu trữ của bạn và nhận được thông tin hữu ích từ báo cáo sự cố BugSense của bạn (hoặc bất kỳ báo cáo sự cố khác cho rằng vấn đề):

  1. Sao chép stack trace từ BugSense vào TextEdit hoặc bất kỳ trình soạn thảo văn bản khác. Đảm bảo sử dụng biểu tượng "clipboard", thay vì chỉ sao chép văn bản. Nếu không, bạn sẽ không nhận được vị trí bộ nhớ thực tế của dấu vết ngăn xếp, cần thiết để tra cứu các tham chiếu bằng cách sử dụng atos và biểu thị dấu vết ngăn xếp của bạn.
  2. Mở mã XCode và đi tới Trình tổ chức
  3. Tìm kho lưu trữ của bạn và nhấp chuột phải vào tệp lưu trữ, đi tới mở nó trong công cụ tìm.
  4. Điều hướng đến thư mục của các kho lưu trữ, thường ~/Library/Developer/XCode/Archives/YYYY-MM-DD/
  5. Đi vào kho lưu trữ cụ thể, và sau đó là dSYMs thư mục
  6. Bạn sẽ thấy file MyApp.app.dSYM và bạn có thể nghĩ rằng, đây là tập tin mà tôi nên chạy atos chống lại! Điều này là không chính xác. Nó thực sự là một gói khác!cd vào gói này, vào thư mục: MyApp.app.dSYM/Contents/Resources/DWARF và bạn sẽ tìm thấy một tệp khác được gọi đơn giản là MyApp. Đây là tệp dSYM thực tế.
  7. Chạy atos -arch armv7 -o MyApp 0x0000000 (hoặc bất kỳ địa chỉ bộ nhớ nào) để tìm vị trí lỗi của bạn hoặc chỉ cần atos -arch armv7 -o MyApp để vào chế độ tương tác.
+19

Wow, bước 6 đã giúp ích rất nhiều ở đây. Cảm ơn! – pt2ph8

+1

"-arch armv7" - là thực sự quan trọng, tôi đã có dữ liệu sai mà không có nó – AlexeyVMP

+2

Tôi có một backtrace nhưng không có đăng nhập sụp đổ, điều này sẽ vẫn làm việc? Dường như chỉ cho tôi vị trí ngẫu nhiên. Đây là một dòng ví dụ từ backtrace của tôi: MyApp 0x00054b23 MyApp + 301859 – jjxtra

3

Bạn phải có địa chỉ phù hợp. Bạn có thể sử dụng giải pháp ở trên nhưng bạn phải sử dụng toán học hex để có được địa chỉ bộ nhớ phù hợp. slide + stack address - địa chỉ tải.

+1

Câu trả lời này cho thấy cách nhận các giá trị được đề cập: http: // stackoverflow.com/questions/13574933/ios-crash-reports-atos-not-working-as-expected/13576028 # 13576028 – Kerni