Báo cáo sự cố ứng dụng iPhone


432

Tôi đang tìm cách thử và tượng trưng cho các báo cáo sự cố của ứng dụng iPhone của tôi.

Tôi đã lấy các báo cáo sự cố từ iTunes Connect. Tôi có tệp nhị phân ứng dụng mà tôi đã gửi tới App Store và tôi có tệp dSYM được tạo như một phần của bản dựng.

Tôi có tất cả các tệp này cùng nhau trong một thư mục được lập chỉ mục bởi spotlight.

Gì bây giờ?

Tôi đã thử gọi:

symbolicatecrash crashreport.crash myApp.app.dSYM

và nó chỉ xuất ra cùng một văn bản trong báo cáo sự cố để bắt đầu, không được tượng trưng.

Tôi có làm điều gì sai?


3
Bạn cũng có thể thấy câu trả lời của tôi tại SDK iPhone: Symbolicatecrash.sh nằm ở đâu? . Tôi liệt kê ra nơi để tìm symbolicatecrashlệnh, cách sử dụng và cách tìm tệp dSYM cần thiết để thực hiện biểu tượng.
Sam

6
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/symbolicatecrash
logancautrell

5
Tôi đã tạo một tập lệnh có thể giúp: github.com/amleszk/scripts/blob/master/iêu
amleszk

1
Nếu bất cứ ai đang tự hỏi bạn có thể lấy * .app, * .dSYM và các bản ghi sự cố ở đâu thì hãy xem câu trả lời của tôi dưới đây.
Sam B

3
Bạn có thể tham khảo điều này: Medium.com/@Mrugraj/crash-re-symbolication-5c28d3a3a883
Mrug

Câu trả lời:


688

Các bước để phân tích báo cáo sự cố từ apple:

  1. Sao chép tệp .app phát hành đã được đẩy vào kho ứng dụng, tệp .dSYM được tạo tại thời điểm phát hành và báo cáo sự cố nhận được từ APPLE vào FOLDER .

  2. MỞ ứng dụng thiết bị đầu cuối và đi đến thư mục được tạo ở trên (sử dụng cdlệnh)

  3. Chạy đi atos -arch armv7 -o APPNAME.app/APPNAME MEMORY_LOCATION_OF_CRASH. Vị trí bộ nhớ phải là vị trí mà ứng dụng bị sập theo báo cáo.

Ví dụ: atos -arch armv7 -o 'APPNAME.app'/'APPNAME' 0x0003b508

Điều này sẽ cho bạn thấy dòng chính xác, tên phương thức dẫn đến sự cố.

Ví dụ: [classname functionName:]; -510

Tượng trưng cho IPA

nếu chúng ta sử dụng IPA để tượng trưng - chỉ cần đổi tên phần mở rộng .ipa bằng .zip, giải nén nó thì chúng ta có thể nhận được Thư mục tải trọng có chứa ứng dụng. Trong trường hợp này, chúng tôi không cần tệp .dSYM.

Ghi chú

Điều này chỉ có thể hoạt động nếu nhị phân ứng dụng không có biểu tượng bị tước. Theo mặc định phát hành xây dựng tước bỏ các biểu tượng. Chúng tôi có thể thay đổi nó trong cài đặt xây dựng dự án "Dải biểu tượng gỡ lỗi trong khi sao chép" thành NO.

Thêm chi tiết xem bài này


12
Chỉ cần một mẹo để trả lời @NaveenShan, một ví dụ trong thế giới thực sẽ làm điều này atos -o myApp.app/Contents/MacOS/myApp 0x0000000100001f2c và bạn nhận được -[HUDWindow sizedHUDBackground] (in myApp) + 1197
loretoparisi

3
Bạn sử dụng địa chỉ nào? Các nhật ký có hai cột địa chỉ sau mỗi chức năng và cột thứ hai có dấu + và một số loại. Giống như 0x332da010 0x332d9000 + 4112.
Oscar

7
@OscarGoldman Địa chỉ thứ hai, ví dụ: - Trong 0x332da010 0x332d9000 + 4112. sử dụng 0x332d9000.
Naveen Shan

4
Ngoài ra, nếu được sử dụng mà không có địa chỉ, nó cho phép bạn phân tích nhiều vị trí bằng cách gửi từng vị trí một.
Paul Ardeleanu

42
Có nhiều vấn đề với câu trả lời này: 1. Điều này chỉ có thể hoạt động nếu nhị phân ứng dụng không có biểu tượng bị tước. Và phát hành bản dựng theo mặc định làm chúng bị tước bỏ. 2. Ngay cả khi các biểu tượng có sẵn, nó sẽ không bao giờ hiển thị số dòng. Chỉ tượng trưng với dSYM sẽ cung cấp điều đó. 3. Bạn không thể đơn giản sử dụng địa chỉ bộ nhớ được hiển thị trong theo dõi ngăn xếp, địa chỉ phải được chuẩn hóa theo địa chỉ bộ nhớ bắt đầu mà ứng dụng được tải vào. Thêm chi tiết xem câu trả lời này: stackoverflow.com/questions/13574933/ từ
Kerni

173

Sau khi đọc tất cả các câu trả lời ở đây để tượng trưng cho một bản ghi sự cố (và cuối cùng thành công), tôi nghĩ rằng có một số điểm bị thiếu ở đây thực sự quan trọng để xác định lý do tại sao việc gọi biểu tượng hóa không tạo ra đầu ra tượng trưng.

Có 3 tài sản phải khớp với nhau khi tượng trưng cho nhật ký sự cố:

  1. Bản thân tệp nhật ký sự cố (nghĩa là example.crash), được xuất từ ​​trình tổ chức của XCode hoặc nhận được từ iTunes Connect.
  2. Các .appgói (ví dụ example.app) mà bản thân chứa nhị phân ứng dụng thuộc nhật ký sự cố. Nếu bạn có một .ipagói (tức là example.ipa) thì bạn có thể giải nén .appgói đó bằng cách giải nén .ipagói (tức là unzip example.ipa). Sau đó .appgói nằm trong Payload/thư mục giải nén.
  3. Các .dSYMgói có chứa các ký hiệu gỡ lỗi (ví dụ example.app.dSYM)

Trước khi bắt đầu ký hiệu, bạn nên kiểm tra xem tất cả các tạo phẩm đó có khớp hay không, điều đó có nghĩa là nhật ký sự cố thuộc về nhị phân bạn có và các ký hiệu gỡ lỗi là những ký tự được tạo ra trong quá trình xây dựng nhị phân đó.

Mỗi nhị phân được tham chiếu bởi một UUID có thể nhìn thấy trong tệp nhật ký sự cố:

...
Binary Images:
0xe1000 -    0x1f0fff +example armv7  <aa5e633efda8346cab92b01320043dc3> /var/mobile/Applications/9FB5D11F-42C0-42CA-A336-4B99FF97708F/example.app/example
0x2febf000 - 0x2fedffff  dyld armv7s  <4047d926f58e36b98da92ab7a93a8aaf> /usr/lib/dyld
...

Trong trích xuất này, nhật ký sự cố thuộc về hình ảnh nhị phân của ứng dụng có tên example.app/example với UUID aa5e633efda8346cab92b01320043dc3.

Bạn có thể kiểm tra UUID của gói nhị phân bạn có với dwarfdump:

dwarfdump --uuid example.app/example
UUID: AA5E633E-FDA8-346C-AB92-B01320043DC3 (armv7) example.app/example

Sau đó, bạn nên kiểm tra xem các biểu tượng gỡ lỗi mà bạn có cũng thuộc về nhị phân đó không:

dwarfdump --uuid example.app.dSYM
UUID: AA5E633E-FDA8-346C-AB92-B01320043DC3 (armv7) example.app.dSYM/Contents/Resources/DWARF/example

Trong ví dụ này, tất cả các tài sản khớp với nhau và bạn sẽ có thể tượng trưng cho stacktrace của mình.

Tiếp tục với symbolicatecrashkịch bản:

Trong Xcode 8.3, bạn sẽ có thể gọi tập lệnh thông qua

/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash -v example.crash 2> symbolicate.log

Nếu nó không ở đó, bạn có thể chạy một find . -name symbolicatecrashthư mục Xcode.app để tìm nó.

Như bạn có thể thấy không có thêm thông số nào được đưa ra. Vì vậy, tập lệnh phải tìm các ký hiệu nhị phân và gỡ lỗi ứng dụng của bạn bằng cách chạy một tìm kiếm nổi bật. Nó tìm kiếm các biểu tượng gỡ lỗi với một chỉ mục cụ thể được gọi là com_apple_xcode_dsym_uuids. Bạn có thể tự thực hiện tìm kiếm này:

mdfind 'com_apple_xcode_dsym_uuids = *'

tôn trọng.

mdfind "com_apple_xcode_dsym_uuids == AA5E633E-FDA8-346C-AB92-B01320043DC3"

Lệnh gọi spotlight đầu tiên cung cấp cho bạn tất cả các gói dSYM được lập chỉ mục và gói thứ hai cung cấp cho bạn các .dSYMgói có UUID cụ thể. Nếu spotlight không tìm thấy .dSYMgói của bạn thì symbolicatecrashcũng không. Nếu bạn làm tất cả những thứ này, ví dụ như trong thư mục con của ~/Desktopánh đèn sân khấu của bạn sẽ có thể tìm thấy mọi thứ.

Nếu symbolicatecrashtìm thấy .dSYMgói của bạn , nên có một dòng như sau symbolicate.log:

@dsym_paths = ( <SOME_PATH>/example.app.dSYM/Contents/Resources/DWARF/example )

Để tìm .appgói của bạn, một tìm kiếm nổi bật như sau được gọi bởi symbolicatecrash:

mdfind "kMDItemContentType == com.apple.application-bundle && (kMDItemAlternateNames == 'example.app' || kMDItemDisplayName == 'example' || kMDItemDisplayName == 'example.app')"

Nếu symbolicatecrashtìm thấy .appgói của bạn , nên có trích xuất sau symbolicate.log:

Number of symbols in <SOME_PATH>/example.app/example: 2209 + 19675 = 21884
Found executable <SOME_PATH>/example.app/example
-- MATCH

Nếu tất cả các tài nguyên đó được tìm thấy bởi symbolicatecrashnó sẽ in ra phiên bản tượng trưng của nhật ký sự cố của bạn.

Nếu không, bạn có thể chuyển trực tiếp các tệp dSYM và .app.

symbolicatecrash -v --dsym <SOME_PATH>/<App_URI>.app.dSYM/<APP_NAME>.app.dsym <CRASHFILE> <SOME_OTHER_PATH>/<APP_NAME>.app/<APP_NAME> > symbolicate.log

Lưu ý: Backtrace tượng trưng sẽ được xuất ra terminal, không symbolicate.log.


Tôi có thể tìm thấy tất cả các tập tin tuy nhiên tôi nhận được điều này và không có đầu ra tượng trưngNo crash report version in testlog.crash at /usr/bin/symbolicatecrash line 921.
vào

1
Điều này thực sự hữu ích! Trong trường hợp của tôi, tệp .app có tên khác với tên thực thi (tôi không biết tại sao nhưng nó được Xcode xây dựng theo cách này). Sau khi đổi tên tệp .app trong kho lưu trữ XCode, việc biểu tượng hóa đã hoạt động.
Hrissan

28
Đây là một lời giải thích tuyệt vời và nên là câu trả lời hàng đầu IMO, cảm ơn bạn. Lưu ý rằng bạn có thể phải đặt DEVELOPER_DIRbiến môi trường của mình nếu tập lệnh phàn nàn về nó như vậy : export DEVELOPER_DIR=`xcode-select --print-path` . Tôi đã thêm dòng này vào ~/.bash_profile. Xem stackoverflow.com/q/11682789/350761
Eliot

1
Lưu ý rằng đối Xcode 5, điều này đã chuyển sang: <PATH_TO_Xcode.app> /Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKitBase.framework/Versions/Current/Resources/symbolicatecrash
Eliot

1
biểu tượng sụp đổ cũng có một số tùy chọn hữu ích. <SYMBOL_PATH> Additional search paths in which to search for symbol rich binaries -o | --output <OUTPUT_FILE> The symbolicated log will be written to OUTPUT_FILE. Defaults to "-" (i.e. stdout) if not specified -d | --dsym <DSYM_BUNDLE> Adds additional dSYM that will be consulted if and when a binary's UUID matches (may be specified more than once)
benuuu

115

Với phiên bản Xcode mới nhất (3.2.2), bạn có thể kéo và thả bất kỳ báo cáo sự cố nào vào phần Nhật ký thiết bị của Trình tổ chức Xcode và chúng sẽ tự động được ký hiệu cho bạn. Tôi nghĩ rằng điều này hoạt động tốt nhất nếu bạn xây dựng phiên bản Ứng dụng đó bằng Build & Archive (cũng là một phần của Xcode 3.2.2)


3
Điều này chỉ đơn giản là không hoạt động với Xcode4, trên bản cài đặt mới. Có vẻ là một lỗi mới :(
Adam

1
Tôi không chắc liệu điều này có giải quyết được cùng một vấn đề mà bạn gặp phải không, nhưng ai đó đã vá tập lệnh tượng trưng github.com/nskboy/symbolicatecrash-fix YMMV :)
Alan Rogers

2
Mẹo này hoạt động với Xcode 4.2. Đặt crashlog trong Nhật ký thiết bị của người tổ chức. Khởi động lại Trình tổ chức sẽ nhận được các bản ghi sự cố tượng trưng !!! Cảm ơn.
khắc nghiệt2811

2
Điều này không hoạt động với tôi khi tôi nhập tệp lưu trữ từ một máy tính khác để nhận nhật ký sự cố. :( Vì lý do này, tôi đã phải ký hiệu thủ công tệp. Bạn có thể tìm các bước về cách thực hiện ký hiệu ở đây: SDK iPhone: Symbolicatecrash.sh nằm ở đâu?
Sam

3
Đừng làm việc với tôi với các báo cáo sự cố được tải xuống từ iTunes Connect.
Dmitry

72

Tôi đã làm điều này thành công, sử dụng các bước sau.

Bước 1: Tạo một thư mục trong máy tính để bàn, tôi đặt tên cho "CrashReport" và đặt ba tệp ("MYApp.app", "MyApp.app.dSYM", "MYApp_2013-07-18.crash") vào đó.

Bước 2: Mở Finder và đi đến Ứng dụng, nơi bạn sẽ tìm thấy ứng dụng Xcode, nhấp chuột phải vào đây và Nhấp vào "Hiển thị nội dung gói", sau đó đi theo con đường đơn giản này. "Nội dung-> Nhà phát triển-> Nền tảng-> iPhoneOS.pl platform-> Nhà phát triển-> Thư viện-> PrivateFrameworks-> DTDeviceKit.framework -> Phiên bản- > A-> Tài nguyên"

HOẶC LÀ

"Nội dung-> Nhà phát triển-> Nền tảng-> iPhoneOS.pl platform-> Nhà phát triển-> Thư viện-> PrivateFrameworks-> DTDeviceKitBase.framework -> Phiên bản- > A-> Tài nguyên"

HOẶC LÀ

Đối với Xcode 6 trở lên, đường dẫn là Ứng dụng / Xcode.app / Nội dung / SharedFrameworks / DTDeviceKitBase.framework / Phiên bản / A / Tài nguyên

Nơi bạn tìm thấy tệp "Symbolicatecrash", sao chép tệp này và dán nó vào thư mục "CrashReport".

Bước 3: khởi chạy terminal, chạy 3 Command này

  1. cd / Users / mac38 / Desktop / CrashReport và nhấn nút Enter

  2. xuất DevelopER_DIR = "/ Ứng dụng / Xcode.app / Nội dung / Nhà phát triển" và nhấn Enter

  3. ./symbolicatecrash -A -v MYApp_2013-07-18.crash MyApp.app.dSYM và nhấn Enter Now it Done .. (LƯU Ý: các phiên bản khoảng 6.4 trở lên không có tùy chọn -A - chỉ cần bỏ nó đi).

3
đối với DTServiceKit hãy tìm trong Ứng dụng / Xcode.app / Nội dung / SharedFrameworks
Ryan Heitner

3
Cảm ơn bạn ... kể từ ngày 9 tháng 4 năm 2015, đây là điều làm việc cho tôi hoàn hảo. Một điều, là tôi đã nhận được Unknown option: Abiểu tượng, nhưng quá trình vẫn diễn ra
Matt Fiocca

1
Tôi ước tôi có thể cho một ngàn điểm cho câu trả lời này. Có rất nhiều hướng dẫn về chủ đề này ... nhưng đây là cách hoạt động ở mức thấp nhất để LUÔN LUÔN hoạt động. Đó là một nỗi đau ở phía sau để đạt được tất cả các bước, nhưng khi mọi thứ khác thất bại, điều này thực hiện công việc.
Chad Robinson

35

Các bước để biểu tượng hóa báo cáo sự cố tự động bằng XCode:

CẬP NHẬT CHO XCODE 9

  1. Kết nối bất kỳ thiết bị iOS nào với máy Mac của bạn (có thiết bị vật lý, vâng tôi biết điều này thật ngu ngốc)

  2. Chọn "Thiết bị" từ menu "Cửa sổ" nhập mô tả hình ảnh ở đây

  3. Nhấp vào thiết bị của bạn ở bên trái và XEM NHẬP THIẾT BỊ THIẾT BỊ ở bên phải nhập mô tả hình ảnh ở đây

  4. Chờ đợi. Nó có thể mất một phút để hiển thị. Có lẽ làm Command-Asau đó Deletesẽ tăng tốc độ này.

  5. Bước quan trọng không có giấy tờ: đổi tên báo cáo sự cố mà bạn đã nhận được từ iTunesConnect từ.txttiện ích mở rộng sang.crashtiện ích mở rộng

  6. Kéo báo cáo sự cố vào khu vực bên trái nhập mô tả hình ảnh ở đây

Và sau đó Xcode sẽ tượng trưng cho báo cáo sự cố và hiển thị kết quả.

Nguồn: https://developer.apple.com/l Library / ios / technotes / tn2151 / _index.html


1
Đây là thủ tục chính thức của Apple. Nên là câu trả lời.
Giammy

2
Cảm ơn bạn, tôi đang thêm hình ảnh bây giờ. Cũng bao gồm các bước SIÊU HIỂU. Tôi nghĩ về việc tạo ra một git văn bản màu đỏ và ghép nó vào đó để nó thực sự nổi bật. Sau đó tôi ngừng suy nghĩ về điều đó.
William Entriken

1
Cảm ơn bạn! Không có câu trả lời nào khác thực sự nói rằng thiết bị bạn sử dụng không cần phải là thiết bị (hoặc thậm chí là loại thiết bị) mà sự cố xảy ra.
galactikuh

Ghi chú nhanh, vì đối với tôi nó sẽ không biểu tượng lại. Tôi cũng phải mở Trình tổ chức, nhấp vào bản dựng trong Lưu trữ, nhấp vào Tải xuống Biểu tượng gỡ lỗi. Sau đó, tôi có thể biểu tượng lại trong chế độ xem nhật ký thiết bị. Đây là một bản ghi sự cố được tải xuống từ Apple sau khi đánh giá bị từ chối.
gregthegeek

28

Tôi sử dụng Airbrake trong các ứng dụng của mình, hoạt động khá tốt trong việc ghi nhật ký lỗi từ xa.

Đây là cách tôi tượng trưng cho chúng bằng atos nếu backtrace cần nó:

  1. Trong Xcode (4.2), hãy đến trình tổ chức, nhấp chuột phải vào kho lưu trữ mà tệp .ipa được tạo.

  2. Trong Terminal, cd vào xcarchive chẳng hạnMyCoolApp 10-27-11 1.30 PM.xcarchive

  3. Nhập thông tin sau atos -arch armv7 -o 'MyCoolApp.app'/'MyCoolApp' (đừng quên dấu ngoặc đơn)

  4. Tôi không bao gồm biểu tượng của tôi trong cuộc gọi đó. Những gì bạn nhận được là một con trỏ khối trên một dòng trống.

  5. Sau đó, tôi sao chép / dán mã ký hiệu của mình vào con trỏ khối đó và nhấn enter. Bạn sẽ thấy một cái gì đó như:

    -[MyCoolVC dealloc] (in MyCoolApp) (MyCoolVC.m:34)

  6. Bạn đang quay lại một con trỏ khối và bạn có thể dán vào các biểu tượng khác.

Có thể đi qua backtrace của bạn một mục mà không cần nhập lại bit đầu tiên là một trình tiết kiệm thời gian tốt đẹp.

Thưởng thức!


28

Tôi cũng đặt DSym, gói ứng dụng và nhật ký sự cố với nhau trong cùng một thư mục trước khi chạy sự cố tượng trưng

Sau đó, tôi sử dụng chức năng này được xác định trong .profile của mình để đơn giản hóa việc chạy biểu tượng:

function desym
{
    /Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/symbolicatecrash -A -v $1 | more
}

Các đối số được thêm vào đó có thể giúp bạn.

Bạn có thể kiểm tra để đảm bảo đèn sân khấu "nhìn thấy" các tập tin rối loạn của bạn bằng cách chạy lệnh:

mdfind 'com_apple_xcode_dsym_uuids = *'

Tìm kiếm các DSym bạn có trong thư mục của bạn.

LƯU Ý: Kể từ Xcode mới nhất, không còn thư mục Nhà phát triển. Bạn có thể tìm thấy tiện ích này ở đây:

/Appluggest/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Vers‌ ion / A / Tài nguyên / Symbolicatecrash


1
Tôi đã xem kết quả đầu ra của mdfind và tập tin dSYM chắc chắn có thể được nhìn thấy bằng đèn chiếu. Tuy nhiên, tập lệnh Symbolicatecrash vẫn không tạo ra bất cứ điều gì khác với bản báo cáo sự cố. Ngay cả khi sử dụng các đối số bạn cung cấp.
Jasarien

Kịch bản sẽ tạo ra một số văn bản cảnh báo ngay từ đầu nếu nó không thể tìm thấy DSym - bạn có thể tìm nó và xem nó nói gì không?
Kendall Helmstetter Gelner

Ngoài ra, hãy thử thêm "." sau lệnh, vì vậy nó sẽ là "Symbolicatecrash -A -v MyApp.crashlog." . Điều đó buộc nó phải tìm trong thư mục hiện tại nếu nó chưa làm như vậy.
Kendall Helmstetter Gelner

Có nghĩa là "Không thể thực thi" / usr / bin / xcode-select ": Không có tệp hoặc thư mục như vậy tại /Developer/Plevelops/iPhoneOS.pl platform / Developer / L Library / Code / Plug-ins / iPhoneRemoteDevice.xcodeplugin / Symbolicatecrash dòng 49. "
bpapa

Rất tiếc, rõ ràng có một câu hỏi SO khác cho stackoverflow.com/questions/1859852/
Kẻ

21

Chỉ cần một câu trả lời đơn giản và cập nhật cho xcode 6.1.1.

BƯỚC

1.Xcode> Cửa sổ> Thiết bị.

2.Chọn thiết bị từ danh sách các thiết bị trong phần THIẾT BỊ.

3.Chọn Xem Nhật ký thiết bị.

4.Sử dụng phần Tất cả Nhật ký, bạn có thể trực tiếp kéo thả báo cáo.

5.Xcode sẽ tự động Tượng trưng cho báo cáo sự cố cho bạn.

6.Bạn có thể tìm thấy báo cáo sự cố tượng trưng bằng cách khớp Ngày / Giờ của nó với Ngày / Giờ được đề cập trong báo cáo sự cố của bạn.


3
Các báo cáo sự cố mà tôi đã tải xuống từ Trung tâm Nghị quyết của Apple thường có phần mở rộng là .txt. Hãy nhớ đổi tên chúng thành .crash, nếu không Nhật ký thiết bị có thể từ chối thêm chúng. Hoạt động tốt cho XCode 6.3.1 hiện tại của tôi
Tony

3
Đây là thủ tục chính thức của Apple. Nên là câu trả lời. Liên kết của Apple: Lưu ý kỹ thuật TN2151: Tìm hiểu và phân tích các báo cáo sự cố ứng dụng iOS
Giammy

Làm thế nào để chúng tôi làm điều này nếu sự cố đến từ Apple / iTunesConnect? Vì vậy, nói cách khác chúng ta không thực sự biết hoặc có thiết bị xảy ra sự cố?
galactikuh

14

Mặc dù tôi đã phát triển ứng dụng được vài năm rồi, đây là lần đầu tiên tôi gỡ lỗi nhị phân và tôi cảm thấy như một NOOB hoàn chỉnh tìm ra nơi tất cả các tệp tức là * .app * .dSYM và nhật ký sự cố? Tôi đã phải đọc nhiều bài viết để tìm ra nó. Hình ảnh đáng giá ngàn lời nói và tôi hy vọng bài đăng này sẽ giúp được ai khác trong tương lai.

1- Trước tiên, hãy truy cập itunesconnect và tải xuống nhật ký sự cố của bạn. LƯU Ý: Có phải hầu hết các trường hợp bạn có thể nhận được một cái gì đó như "Quá ít báo cáo đã được gửi để báo cáo được hiển thị." Về cơ bản không đủ người dùng đã gửi báo cáo nhật ký sự cố cho Apple trong trường hợp đó bạn không thể làm gì nhiều vào thời điểm đó.

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

2- Bây giờ nếu bạn không thay đổi mã của mình vì bạn đã gửi mã nhị phân của mình cho Apple thì Khởi chạy Xcode cho dự án đó và thực hiện Sản phẩm -> Lưu trữ lại. Nếu không, chỉ cần tìm nhị phân gửi mới nhất của bạn và nhấp chuột phải vào nó.

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây


8

Trong Xcode 4.2.1, mở Trình tổ chức , sau đó chuyển đến Nhật ký thư viện / thiết bị và kéo tệp .crash của bạn vào danh sách nhật ký sự cố. Nó sẽ được tượng trưng cho bạn sau một vài giây.

Lưu ý rằng bạn phải sử dụng cùng một phiên bản Xcode mà bản dựng ban đầu được lưu trữ trên (tức là kho lưu trữ cho bản dựng của bạn phải tồn tại trong Trình tổ chức ).


8

Sử dụng Xcode 4, công việc thậm chí còn đơn giản hơn:

  • mở tổ chức ,
  • bấm vào Thư viện | Đăng nhập thiết bị ở cột bên trái
  • nhấp vào nút " Nhập " ở dưới cùng của màn hình ...

và Voila. Tệp nhật ký được nhập và Ký hiệu tự động cho bạn. Cung cấp cho bạn Lưu trữ bản dựng bằng Xcode -> Sản phẩm -> Lưu trữ trước.


1
Đủ lạ, nhập không có tác dụng. Việc đặt .app, .dSYM và .crash và sau đó chạy biểu tượng biểu tượng trên tệp .crash (không có bất kỳ đối số bổ sung nào) hoạt động mặc dù (XCode 4)
Russian

7

Trình tổ chức Xcode ma thuật không phải là điều kỳ diệu trong việc tượng trưng cho ứng dụng của tôi. Tôi hoàn toàn không có biểu tượng nào cho các báo cáo sự cố mà tôi đã nhận được từ Apple sau khi gửi ứng dụng thất bại.

Tôi đã thử sử dụng dòng lệnh, đặt báo cáo sự cố vào cùng thư mục với tệp .app (mà tôi đã gửi tới cửa hàng) và tệp .dSYM:

$ symbolicatecrash "My App_date_blahblah-iPhone.crash" "My App.app"

Điều này chỉ cung cấp các ký hiệu cho ứng dụng của tôi chứ không phải mã nền tảng cốt lõi, nhưng nó tốt hơn so với kết xuất số mà Nhà tổ chức đang đưa cho tôi và đủ để tôi tìm và khắc phục sự cố mà ứng dụng của tôi gặp phải. Nếu bất cứ ai biết cách mở rộng điều này để có được các biểu tượng Foundation thì nó sẽ được đánh giá cao.


Đối với Core Foundation dSYM, một anh chàng (có thể là người Trung Quốc) ngoài đó đã tải lên dSYM trên ổ đĩa google được chia sẻ của anh ấy, chỉ cần tải xuống và ném vào thư mục "thiết bị được hỗ trợ" và nó sẽ được giải quyết. github.com/Zuikyo/iOS-System-Symbols
harunaga

6

Trong trường hợp của tôi, tôi đã kéo các báo cáo sự cố trực tiếp từ Mail đến Ban tổ chức. Vì một số lý do, điều đó đã ngăn các báo cáo sự cố không được tượng trưng (tôi muốn biết tại sao).

Trước tiên, sao chép các báo cáo sự cố vào Bàn làm việc, sau đó kéo chúng từ đó sang Trình tổ chức để chúng được ký hiệu đúng.

Trường hợp rất cụ thể, tôi biết. Nhưng nghĩ rằng tôi chỉ chia sẻ trong trường hợp.


Tôi tưởng tượng điều này có thể có một cái gì đó để làm với ánh đèn sân khấu. Có bất kỳ vị trí nào mà nhà tổ chức giữ nhật ký của bạn không được lập chỉ mục bởi ánh đèn sân khấu không?
Jasarien

4

Đây là một vấn đề khác mà tôi gặp phải với Symbolicatecrash - nó sẽ không hoạt động với Ứng dụng có không gian trong gói của họ (ví dụ: 'Thử nghiệm ứng dụng'). Lưu ý Tôi không nghĩ rằng bạn có thể có khoảng trắng trong tên của họ khi gửi vì vậy bạn vẫn nên xóa những khoảng trống này, nhưng nếu bạn đã gặp sự cố cần phân tích, hãy vá biểu tượng (4.3 GM) như sau:

240c240
<         my $cmd = "mdfind \"kMDItemContentType == com.apple.application-bundle && kMDItemFSName == $exec_name.app\"";
---
>         my $cmd = "mdfind \"kMDItemContentType == com.apple.application-bundle && kMDItemFSName == '$exec_name.app'\"";
251c251
<             my $cmd = "find \"$archive_path/Products\" -name $exec_name.app";
---
>             my $cmd = "find \"$archive_path/Products\" -name \"$exec_name.app\"";

Để biết giá trị của nó, tôi đã điền vào một bản sao về điều này và nó đã được sửa trong [tái cấu trúc]
Alastair Stuart

4

Đối với những người sử dụng Airbrake, có một phản hồi chắc chắn ở trên nhưng nó sẽ không hoạt động đối với tôi mà không cần điều chỉnh:

Hoạt động cho một số địa chỉ bộ nhớ nhưng không phải địa chỉ khác, không biết tại sao ...

  • Tạo thư mục mới trên máy tính để bàn hoặc bất cứ nơi nào
  • Tìm kho lưu trữ trong câu hỏi trong trình tổ chức Xcode
  • Nhấn đúp để hiển thị trong công cụ tìm
  • Nhấn đúp để hiển thị nội dung gói
  • Sao chép tệp .dSYM và tệp .app vào thư mục mới
  • cd vào thư mục mới
  • Chạy lệnh này: atos -arch armv7 -o 'Vimeo.app' / 'Vimeo'
  • Terminal sẽ bước vào một động thái tương tác
  • Dán vào địa chỉ bộ nhớ và nhấn enter, nó sẽ xuất tên phương thức và số dòng
  • Hoặc, nhập lệnh này: atos -arch armv7 -o 'Vimeo.app' / 'Vimeo' Để nhận thông tin chỉ cho một địa chỉ

4

Sự kết hợp làm việc cho tôi là:

  1. Sao chép tệp dSYM vào thư mục chứa báo cáo sự cố
  2. Giải nén tệp ipa chứa ứng dụng ('giải nén MyApp.ipa')
  3. Sao chép tệp nhị phân của ứng dụng từ tải trọng đã phát nổ vào cùng thư mục với tệp báo cáo sự cố và tệp ký hiệu (Một cái gì đó như "MyApp.app/MyApp")
  4. Nhập hoặc ký hiệu lại báo cáo sự cố từ bên trong trình tổ chức của Xcode

Sử dụng atos tôi không thể giải quyết thông tin biểu tượng chính xác bằng địa chỉ và giá trị bù trong báo cáo sự cố. Khi tôi làm điều này, tôi thấy một cái gì đó có ý nghĩa hơn, và nó dường như là một dấu vết ngăn xếp hợp pháp.


3

Tôi đã phải thực hiện rất nhiều việc hack tập lệnh Symbolicatecrash để khiến nó chạy đúng.

Theo như tôi có thể nói, Symbolicatecrash ngay bây giờ yêu cầu .app phải nằm trong cùng thư mục với .dsym. Nó sẽ sử dụng .dsym để định vị .app, nhưng nó sẽ không sử dụng DSym để tìm các ký hiệu.

Bạn nên tạo một bản sao biểu tượng của bạn trước khi thử các bản vá này sẽ làm cho nó trông như thế nào trong DSym:

Xung quanh dòng 212 trong hàm getSymbolPathFor_dsymUuid

212     my @executablePath = grep { -e && ! -d } glob("$dsymdir" . "/Contents/Resources/DWARF/" . $executable);

Xung quanh dòng 265 trong hàm MatchUUID

265             return 1;

1

Điều này thật đơn giản, sau khi tìm kiếm rất nhiều tôi đã tìm thấy các bước rõ ràng để tượng trưng cho toàn bộ tệp nhật ký sự cố.

  • sao chép các tập tin .app, crash_Vport và DSYM trong một thư mục.
  • kết nối thiết bị với xcode
  • Sau đó vào cửa sổ -> chọn thiết bị -> xem nhật ký thiết bị
  • Sau đó chọn thiết bị này, xóa tất cả các bản ghi.
  • kéo và thả sự cố của bạn trên phần nhật ký thiết bị. nó sẽ tự động tượng trưng cho sự cố. chỉ cần nhấp chuột phải vào báo cáo và xuất nó.

mã hóa hạnh phúc,
FPVaz


tốt nhất ans ngắn và ngọt ngào, làm theo từng bước được viết trong ans này. developer.apple.com/l Library / content / technotes / tn2151 / từ theo liên kết này để tìm sự khác biệt giữa không được đánh dấu và được biểu tượng hóa đầy đủ.
Ninad Kambli

1

Tôi thích một kịch bản sẽ tượng trưng cho tất cả các bản ghi sự cố của tôi.

Điều kiện tiên quyết

Tạo một thư mục và đặt ở đó 4 thứ:

  1. symbolicatecrash tập lệnh perl - có nhiều câu trả lời SO cho biết vị trí của nó

  2. Kho lưu trữ của bản dựng phù hợp với các sự cố (từ Xcode Organizer. Đơn giản như Show in Findervà sao chép) [Tôi không chắc đây là điều cần thiết]

  3. Tất cả các xccrashpointgói - (từ Xcode Organizer. Show in Finder, Bạn có thể sao chép tất cả các gói trong thư mục hoặc xccrashpoint duy nhất bạn muốn tượng trưng)

  4. Thêm tập lệnh ngắn đó vào thư mục:

    #!/bin/sh
    
    echo "cleaning old crashes from directory"
    rm -P *.crash
    rm -P *.xccrashpoint
    rm -r allCrashes
    echo "removed!"
    echo ""
    echo "--- START ---"
    echo ""
    
    mkdir allCrashes
    mkdir symboledCrashes
    find `ls -d *.xccrashpoint` -name "*.crash" -print -exec cp {} allCrashes/ \;
    
    cd allCrashes
    for crash in *.crash; do
        ../symbolicatecrash $crash > ../symboledCrashes/V$crash
    done
    cd ..
    
    echo ""
    echo "--- DONE ---"
    echo ""

Kịch bản

Khi bạn chạy tập lệnh, bạn sẽ nhận được 2 thư mục.

  1. allCrashes- tất cả các sự cố từ tất cả xccrashpointsẽ ở đó.

  2. symboledCrashes - cùng một sự cố nhưng bây giờ với tất cả các biểu tượng.

  3. bạn KHÔNG cần dọn dẹp thư mục khỏi các sự cố cũ trước khi chạy tập lệnh. Nó sẽ tự động làm sạch. chúc may mắn!


1

Tôi phát hiện ra hầu hết các lựa chọn thay thế được đề xuất không hoạt động trong XCode mới nhất (được thử nghiệm với Xcode 10). Ví dụ: tôi không gặp may khi kéo các bản ghi .crash trong Xcode -> Trình tổ chức -> Nhật ký thiết bị -view.

Tôi khuyên bạn nên sử dụng công cụ Symbolicator https://github.com/agentsim/Symbolicator

  • Kho lưu trữ biểu tượng Git clone và biên dịch và chạy với Xcode
  • Sao chép tệp .crash (tệp ascii, với dấu vết ngăn xếp để xin tệp) và .xarchive của việc phát hành bị lỗi vào cùng thư mục tạm thời
  • Kéo và thả tệp .crash vào biểu tượng Symbolicator trong Dock
  • Trong 5-30 giây, tệp sự cố được ký hiệu được tạo trong cùng thư mục với .crash và .xarchive là

0

Để tượng trưng cho sự cố, Spotlight phải có thể tìm thấy tệp .dSYM được tạo cùng lúc với tệp nhị phân mà bạn đã gửi cho Apple. Vì nó chứa thông tin biểu tượng, bạn sẽ không gặp may nếu nó không có sẵn.


Nếu bạn đọc câu hỏi, tôi đã nói rằng tôi đã lưu tệp dSYM ban đầu được tạo cùng lúc với tệp nhị phân được gửi.
Jasarien

0

Tôi có một chút gắt gỏng về thực tế không có gì ở đây dường như "chỉ hoạt động" vì vậy tôi đã làm một số điều tra và kết quả là:

Thiết lập: QuincyKit back end nhận báo cáo. Không có biểu tượng nào được thiết lập vì tôi thậm chí không thể bắt đầu tìm ra những gì họ đề nghị tôi làm để làm cho nó hoạt động.

Cách khắc phục: tải báo cáo sự cố từ máy chủ trực tuyến. Chúng được gọi là 'crash' và theo mặc định đi vào thư mục ~ / Tải xuống /. Với ý nghĩ đó, tập lệnh này sẽ "thực hiện đúng" và các báo cáo sự cố sẽ đi vào Xcode (Trình tổ chức, nhật ký thiết bị) và biểu tượng sẽ được thực hiện.

Kịch bản:

#!/bin/bash
# Copy crash reports so that they appear in device logs in Organizer in Xcode

if [ ! -e ~/Downloads/crash ]; then 
   echo "Download a crash report and save it as $HOME/Downloads/crash before running this script."
   exit 1
fi

cd ~/Library/Logs/CrashReporter/MobileDevice/
mkdir -p actx # add crash report to xcode abbreviated
cd actx

datestr=`date "+%Y-%m-%d-%H%M%S"`

mv ~/Downloads/crash "actx-app_"$datestr"_actx.crash"

Mọi thứ có thể được tự động đến nơi bạn có thể kéo và thả trong Xcode Organizer bằng cách thực hiện hai điều nếu bạn sử dụng QuincyKit / PLCR.

Trước tiên, bạn phải chỉnh sửa tập lệnh từ xa admin / actionapi.php ~ dòng 202. Nó dường như không có dấu thời gian đúng, vì vậy tệp kết thúc với tên 'crash' mà Xcode không nhận ra (nó muốn một cái gì đó dấu chấm):

header('Content-Disposition: attachment; filename="crash'.$timestamp.'.crash"');

Thứ hai, trong phần iOS trong QuincyKit BWCrashReportTextFormatter.m ~ dòng 176, thay đổi @"[TODO]"để @"TODO"khắc phục các nhân vật xấu.


0

atos đang bị phản đối vì vậy nếu bạn đang chạy OSX 10.9 trở lên, bạn có thể cần phải chạy

xcrun atos

Cảnh báo: / usr / bin / atos đang di chuyển và sẽ bị xóa khỏi bản phát hành OS X trong tương lai. Nó hiện có sẵn trong các công cụ dành cho nhà phát triển Xcode được gọi thông qua:xcrun atos


Có vẻ như Apple đang cho phép định dạng DWARF biến đổi với mỗi lần phát hành các công cụ (có ý nghĩa, đặc biệt là với sự ra đời của Swift) để họ chuyển nó sang bản phân phối công cụ.
David Gish

0

Tôi thích sử dụng Textwrangler để xác định lỗi trong một từ chối nhị phân tải lên ứng dụng gốc. (Dữ liệu sự cố sẽ được tìm thấy trong tài khoản itunesConnect của bạn.) Sử dụng phương pháp Sachin ở trên, tôi sao chép tệp gốc.crash sang TextWrangler, sau đó sao chép tệp biểu tượng biểu tượng mà tôi đã tạo sang một tệp TextWrangler khác. So sánh sự khác biệt giữa hai tập tin. Tệp Symbolicatecrash sẽ có những khác biệt trong đó chỉ ra tệp và số dòng sự cố.


-2

Chúng tôi sử dụng Google Crashlytics để giám sát nhật ký sự cố, cảm giác rất kịp thời và thuận tiện khi sử dụng.

Liên kết tài liệu Liên kết https://docs.fotype.io/apple/crashlytics/missing-dsyms.html#missing-dsyms

Tất cả về Thiếu vải dSYMs bao gồm một công cụ để tự động tải lên dSYM của dự án của bạn. Công cụ này được thực thi thông qua tập lệnh / run, được thêm vào Run Script Build Phase trong quá trình khởi động. Tuy nhiên, có thể có một số tình huống nhất định, khi tải lên dSYM không thành công do cấu hình dự án duy nhất hoặc nếu bạn đang sử dụng Bitcode trong ứng dụng của mình. Khi tải lên không thành công, Crashlytics không thể biểu tượng hóa và hiển thị các sự cố và thông báo mất tích dSYMật sẽ xuất hiện trên bảng điều khiển Fabric của bạn.

Thiếu các dSYM có thể được tải lên theo cách thủ công theo các bước được nêu dưới đây.

Lưu ý: Thay thế cho công cụ tải lên dSYM tự động, Fabric cung cấp công cụ dòng lệnh (ký hiệu tải lên)) có thể được cấu hình thủ công để chạy như một phần của quy trình xây dựng dự án của bạn. Xem phần biểu tượng tải lên bên dưới để biết hướng dẫn cấu hình.

...

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.