DSYM là gì và làm thế nào để sử dụng nó? (SDK iOS)


117

Đôi khi trình biên dịch tạo ra các tệp .dSYM. Tôi đoán đây là một tệp liên quan đến gỡ lỗi, nhưng tôi không biết nó là gì và cách sử dụng nó.

.DSYM là gì? Làm thế nào để tôi sử dụng nó?

Câu trả lời:


160

Các tệp dSYM lưu trữ các ký hiệu gỡ lỗi cho ứng dụng của bạn

Các dịch vụ như crashlytics sử dụng nó để thay thế các ký hiệu trong nhật ký sự cố bằng các tên phương thức thích hợp để nó dễ đọc và có ý nghĩa.

Lợi ích của việc sử dụng dSYM là bạn không cần phải gửi Ứng dụng của mình với các biểu tượng của ứng dụng, khiến việc thiết kế ngược khó hơn và cũng giảm kích thước nhị phân của bạn

Để sử dụng để biểu thị nhật ký sự cố, bạn cần kéo nhật ký sự cố vào nhật ký thiết bị của thiết bị trong trình tổ chức của máy đã biên dịch tệp nhị phân ứng dụng (một máy lưu trữ dSYM)

Nếu bạn có dSYM nhưng không có máy, tệp nhị phân ứng dụng đã biên dịch, hãy làm theo hướng dẫn trong liên kết này để cài đặt dSYM vào máy

Để biết thêm thông tin chi tiết vui lòng xem ghi chú kỹ thuật của apple TN2151


1
Việc không bao gồm các dSYM với tệp nhị phân cửa hàng ứng dụng có khiến Crashlytics không thể ghi lại các sự cố không?
genaks

Vì vậy, có an toàn khi bỏ chọn hộp 'Bao gồm các ký hiệu ứng dụng ...' không?
genaks

2
nếu bạn muốn có thể xem các bản ghi lỗi bên trong apple connect, bạn có thể bao gồm các ký hiệu ứng dụng khi tải ứng dụng lên cửa hàng ứng dụng. nếu bạn đang sử dụng crashlytics, bạn không cần phải làm điều đó nhưng bạn không cần phải bao gồm các ký hiệu ứng dụng (tệp dsym) và gửi nó đến apple bằng cách chọn "bao gồm các ký hiệu ứng dụng ..." trong tải lên Ứng dụng Thuật sĩ cửa hàng
Tomer Even

1
Tôi đã nghĩ đến việc tiết kiệm cho người dùng một vài MBs nếu nó có thể được thực hiện
genaks

Từ các nhà phát triển Crashlytics - twittercommunity.com/t/...
genaks

1

dSYMlà viết tắt của Xcode Debugging Symbols, nó là một loại tệp ánh xạ, ví dụ, có thể giải mã dấu vết ngăn xếp thành định dạng có thể đọc được. Nó là một Bundlevới cấu trúc tiếp theo:

Ví dụ, một bản ghi sự cố trông giống như sau:

//before
0   libswiftCore.dylib              0x000000018f3c9380 0x18f394000 + 217984
1   libswiftCore.dylib              0x000000018f3c9380 0x18f394000 + 217984
2   libswiftCore.dylib              0x000000018f3c8844 0x18f394000 + 215108
3   libswiftCore.dylib              0x000000018f3a74e0 0x18f394000 + 79072
4   libswiftCore.dylib              0x000000018f3ab0d8 0x18f394000 + 94424
5   F49088168M                      0x00000001045ac750 0x104590000 + 116560
6   F49088168M                      0x00000001045b7904 0x104590000 + 162052
7   F49088168M                      0x00000001045b897c 0x104590000 + 166268
8   F49088168M                      0x000000010459d914 0x104590000 + 55572
9   F49088168M                      0x00000001045a0e70 0x104590000 + 69232
10  F49088168M                      0x00000001045a0f4c 0x104590000 + 69452

dSYM hành động

//after Symbolicating(dSYM is used)
0   libswiftCore.dylib              0x000000018f3c9380 closure #1 in closure #1 in closure #1 in _assertionFailure+ 217984 (_:_:file:line:flags:) + 452
1   libswiftCore.dylib              0x000000018f3c9380 closure #1 in closure #1 in closure #1 in _assertionFailure+ 217984 (_:_:file:line:flags:) + 452
2   libswiftCore.dylib              0x000000018f3c8844 _assertionFailure+ 215108 (_:_:file:line:flags:) + 468
3   libswiftCore.dylib              0x000000018f3a74e0 _ArrayBuffer._checkInoutAndNativeTypeCheckedBounds+ 79072 (_:wasNativeTypeChecked:) + 208
4   libswiftCore.dylib              0x000000018f3ab0d8 Array.subscript.getter + 84
5   F49088168M                      0x00000001045ac750 static ELM327ResponseManager.getResponse(responseStr:obd2Protocol:) + 116560 (ELM327ResponseManager.swift:27)
6   F49088168M                      0x00000001045b7904 ELM327Client.dataInput(_:characteristicUuidStr:) + 162052 (ELM327Client.swift:56)
7   F49088168M                      0x00000001045b897c protocol witness for BLEClientInputPort.dataInput(_:characteristicUuidStr:) in conformance ELM327Client + 166268 (<compiler-generated>:0)
8   F49088168M                      0x000000010459d914 BLEConnection.peripheralDataReceived(data:characteristicUuidStr:) + 55572 (BLEConnection.swift:124)
9   F49088168M                      0x00000001045a0e70 BLEConnection.peripheral(_:didUpdateValueFor:error:) + 69232 (BLEConnection.swift:293)
10  F49088168M                      0x00000001045a0f4c @objc BLEConnection.peripheral(_:didUpdateValueFor:error:) + 69452 (<compiler-generated>:0)

Theo mặc định dSYMđược tạo theo mặc định cho một phiên bản phát hành . Bạn có thể kiểm tra nó:

Build Settings -> Generate Debug Symbols -> Yes
Build Settings -> Debug Information Format -> DWARF with dSYM File

Vị trí kết quả bạn có thể tìm thấy trong Productsthư mục

Để tạo dSYMtệp theo cách thủ công bằng cách .appsử dụngdsymutil

dsymutil F49088168M.app/F49088168M -o F49088168M.app.dSYM

Để biểu thị sự cố bằng cách sử dụng symbolicatecrash

export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer" 
/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/Current/Resources/symbolicatecrash "<path>/F49088168M-2020-06-04-212904.crash" "<path>/F49088168M.app.dSYM" > symbolicated.crash

Để mở dSYMthủ công bằng cách sử dụngdwarfdump

dwarfdump --arch arm64 --debug-pubtypes F49088168M.app.dSYM

kết quả trông giống như:

0x00000065 "PeripheralLogView"
0x000005cc "BLEConnection"
0x000005da "BLEPeripheral"
0x000005e9 "ELM327Client"

[Từ vựng]

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.