MacOS 디버깅 도구 atos: 주소에서 심볼로

애플 생태계에서 개발하다 보면, 디버깅과 성능 최적화는 필수적인 과정입니다. 특히 앱이 충돌할 때, 충돌 로그를 분석하여 문제의 근본 원인을 찾아내는 것이 매우 중요합니다. 이때 atos라는 강력한 도구가 큰 도움이 됩니다. atos는 “Address To Symbol”의 약자로, 메모리 주소를 코드의 구체적인 심볼로 변환해 줍니다. 이 블로그 글에서는 atos 도구의 기능과 사용 방법에 대해 자세히 알아보겠습니다.

1. atos란 무엇인가?

atos는 macOS에 포함된 명령줄 도구로, Xcode Command Line Tools에 설치됩니다. 이 도구는 충돌 로그에 나타난 메모리 주소를 심볼로 변환하여 개발자가 소스 코드의 어느 부분에서 문제가 발생했는지 쉽게 파악할 수 있도록 도와줍니다.

2. atos 설치 및 확인

atos 도구는 Xcode Command Line Tools를 통해 설치됩니다. 만약 설치되지 않았다면, 터미널에서 다음 명령을 실행하여 설치할 수 있습니다:

xcode-select --install

설치가 완료되면, which 명령을 사용하여 atos 도구의 위치를 확인할 수 있습니다:

which atos

대부분의 경우, atos/usr/bin/atos에 위치하고 있습니다.

3. atos 사용 준비: dSYM 파일과 바이너리

atos를 사용하려면, dSYM 파일과 바이너리 파일이 필요합니다. dSYM 파일은 디버그 심볼 파일로, 빌드 시 자동으로 생성됩니다. Xcode의 DerivedData 디렉토리나 빌드 아카이브에서 dSYM 파일을 찾을 수 있습니다.

dSYM 파일 찾기
  1. Xcode에서 Window -> Organizer를 엽니다.
  2. Archives 탭에서 충돌이 발생한 빌드 아카이브를 선택합니다.
  3. Show in Finder를 클릭하여 해당 아카이브 폴더를 엽니다.
  4. .xcarchive 파일을 마우스 오른쪽 버튼으로 클릭하고 Show Package Contents를 선택합니다.
  5. dSYMs 폴더에서 dSYM 파일을 찾습니다.
바이너리 파일 찾기

앱 바이너리 파일은 .app 디렉토리 내에 있습니다. 보통 경로는 다음과 같습니다:

/path/to/YourApp.app/YourApp

4. atos 사용 예제

충돌 로그에서 필요한 정보를 추출한 후, atos를 사용하여 심볼리케이트할 수 있습니다. 예를 들어, 충돌 로그에서 다음과 같은 정보를 얻었다고 가정합니다:

  • 바이너리 이미지 경로: /path/to/YourApp.app/YourApp
  • 로드 주소: 0x100000000
  • 충돌 주소: 0x10007a6bc

터미널에서 다음 명령을 실행합니다:

atos -arch arm64 -o /path/to/YourApp.app/YourApp -l 0x100000000 0x10007a6bc

이 명령은 충돌 주소 0x10007a6bc를 심볼리케이트하여, 소스 코드의 구체적인 파일과 라인 번호를 보여줍니다.

5. atos 옵션 설명

atos 명령에는 다양한 옵션이 있습니다. 주요 옵션들을 살펴보겠습니다:

  • -arch <architecture>: 심볼리케이션을 수행할 아키텍처를 지정합니다. 예를 들어, arm64, x86_64 등. iOS 앱의 경우 일반적으로 arm64를 사용합니다. atos -arch arm64 -o /path/to/YourApp.app/YourApp -l 0x100000000 0x10007a6bc
  • -o <binary-image>: 분석할 바이너리 이미지의 경로를 지정합니다. atos -o /path/to/YourApp.app/YourApp -l 0x100000000 0x10007a6bc
  • -l <load-address>: 바이너리가 메모리에 로드된 시작 주소를 지정합니다. atos -l 0x100000000 -o /path/to/YourApp.app/YourApp 0x10007a6bc
  • address...: 심볼리케이션할 메모리 주소를 지정합니다. 여러 주소를 공백으로 구분하여 지정할 수 있습니다. atos -o /path/to/YourApp.app/YourApp -l 0x100000000 0x10007a6bc 0x10007b150
  • -printHeader: 바이너리 이미지의 Mach-O 헤더를 출력합니다.
  • -printLine: 심볼리케이션된 주소와 함께 소스 코드의 파일과 라인 번호를 출력합니다.
  • -fullPath: 심볼리케이션된 결과에 전체 파일 경로를 포함합니다.

예를 들어, 소스 코드의 파일과 라인 번호를 포함하여 심볼리케이션 결과를 출력하려면:

atos -arch arm64 -o /path/to/YourApp.app/YourApp -l 0x100000000 -printLine 0x10007a6bc

6. 추가 고려사항

  • 정확한 로드 주소 사용: 충돌 로그에서 올바른 로드 주소를 사용하는 것이 중요합니다. 잘못된 로드 주소를 사용하면 심볼리케이션 결과가 정확하지 않을 수 있습니다.
  • dSYM 파일 관리: 빌드된 각 버전의 dSYM 파일을 보관하는 것이 좋습니다. 앱 스토어에 배포된 후에도 해당 버전의 dSYM 파일이 필요할 수 있습니다.
  • 자동화: CI/CD 파이프라인에 atos 명령을 통합하여 자동으로 충돌 로그를 분석할 수 있습니다.

7. 결론

atos는 macOS 및 iOS 개발자에게 매우 유용한 도구입니다. 충돌 로그의 메모리 주소를 심볼리케이션하여, 문제의 원인을 신속하게 파악하고 해결하는 데 큰 도움이 됩니다. 이 글에서 설명한 내용을 바탕으로, atos를 활용하여 보다 효율적인 디버깅과 문제 해결을 경험하시길 바랍니다. 추가적인 질문이나 도움이 필요하면 언제든지 문의해 주세요.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다