-
Notifications
You must be signed in to change notification settings - Fork 1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Debug Symbol과 Symbolication #48
Comments
과정
|
Crash Report Symbolication
dSYM 파일과 앱 바이너리는 build UUID를 통해 서로를 식별합니다. Build UUID는 매 빌드마다 새로 생성됩니다. 그렇기 때문에, 소스 코드 변경 없이 빌드를 수행하는 경우에도 이전에 생성된 dSYM 파일과 새로 생성된 앱 바이너리는 서로 다른 build UUID를 가집니다.
BitCode
Determining Whether a Crash Report is Symbolicated크래시 리포트는 항상 fully symbolicated, partialy symbolicated, unsymbolicated 중 하나의 상태에 넣여 있다. Unsymbolicated
Fully symbolicated
Partially symbolicated
atos를 통한 symbolicationatos 명령어를 사용하면 unsymbolicated 상태인 backtrace상의 특정 주솟값을 symbolicate할 수 있습니다. |
Crash Report 분석하기이번 글에서는 앱에서 발생하는 크래시 리포트가 어떻게 생성되고, 이를 어떻게 활용하여 크래시 문제를 해결할 수 있는지 알아보고자 합니다.
1. 크래시 리포트의 생성사용하고 있는 디바이스에서 크래시가 발생할 경우 시스템은 크래시 리포트를 생성하고 이를 디바이스 내부에 저장합니다. 크래시 리포트는 크래시가 발생한 시점에 대한 환경 정보나 기타 크래시 분석에 유용한 정보들을 담고 있습니다.
Crash reports describe the conditions under which the application terminated, in most cases including a complete backtrace for each executing thread, and are typically very useful for debugging issues in the application.
크래시 리포트는 크래시가 발생한 디바이스의 설정에서 확인할 수 있습니다.
이렇게 저장되어 있는 크래시 리포트를 확인하면 다음과 같은 내용을 담고 있습니다. 내용을 살펴보면 어떤 환경에서 크래시가 발생했는지 대략적으로 확인할 수 있습니다. 그런데 크래시가 발생한 Thread에서 나오는 BackTrace를 살펴보면 소스 코드의 어디에서 크래시가 나오는지 확인하기가 어렵습니다. 어떤 Framework에서 문제가 발생했는지는 대략적으로 알 수 있지만, 이는 너무 광범위해서 디버깅에 큰 도움이 되지 않습니다. 이렇게 BackTrace가 사람이 읽을 수 없는 형태로 나타나는 이유는 크래시 리포트가 2. Symbol, SymbolicationSymbol여기까지 글을 읽으셨다면 개발자가 크래시 로그를 분석할 때, 크래시 리포트가
Symbol - A symbol in computer programming is a primitive data type whose instances have a unique human-readable form.
Symbol Table - In computer science, a symbol table is a data structure used by a language translator such as a compiler or interpreter, where each identifier (a.k.a. symbol) in a program's source code is associated with information relating to its declaration or appearance in the source.
Symbol Table에 포함되는 정보는 언어마다 조금씩 다르지만, 대략적으로 아래와 같은 정보를 포함합니다.
Debug Symbol
A debug symbol is a special kind of symbol that attaches additional information to the symbol table of an object file, such as a shared library or an executable.
그래서 Symbolication이제 크래시 리포트의
Symbolication is the process of resolving backtrace addresses to source code method or function names, known as symbols
3. Crash Report Symbolication앞서서 크래시 리포트가 생성되어 디바이스에 저장되고 이를 export하는 과정을 간략히 살펴 보았습니다. 이처럼 사용자의 앱에 쌓이는 크래시 리포트를 직접 export하여 디버깅을 하기도 합니다. 하지만, 많은 크래시는 누구인지 모르는 사용자의 기기에서 발생합니다. 그리고 크래시를 분석하기 위해서 사용자의 디바이스의 크래시 로그를 보내달라고 하는 것은 매우 불편하고, 현실적인 크래시 분석 방법이 아닙니다. 이와 같은 문제를 해결하기 위해 애플은 동의를 얻은 사용자(혹은 Test Flight 사용자)에 한하여 iTunes Connect에서 크래시가 발생한 기기의 Diagnostic Data를 제공합니다.( 각 과정에 대한 이미지는 다음에서 확인할 수 있습니다.
Xcode - dSYM 설정
일반적으로 Debug 모드에서는 참고 자료 |
Debug Symbol
The text was updated successfully, but these errors were encountered: