일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 해외직구
- 우분투
- python
- 인공지능
- 타이젠
- 손민한
- 안드로이드
- 블로그
- 국정원
- 프로야구
- 단통법
- Git
- 리뷰
- 뉴스타파
- 태그를 입력해 주세요.
- arm
- 야구
- NC다이노스
- Linux
- 데이터베이스
- ubuntu
- Tizen
- mysql
- 문파문파 공략
- ubuntu 12.04
- 애플
- NC 다이노스
- 문파문파
- 김경문
- 조세피난처
- Today
- Total
꿈꾸는 사람.
[안드로이드] call stack 로그로 출력. (java, c, kernel 영역) 본문
1. 안드로이드 장치 구성 개요
위 그림처럼 안드로이드는 다양한 계층으로 이루어져 있다.
응용과 프레임웍은 자바로 만들어졌고 HAL과 라이브러리는 C, C++언어로 써졌다.
리눅스 커널은 C로 작성되었지만 커널의 특성을 알아야 한다.
마지막으로 하드웨어와 인터페이스는 물리적인 장치간 규격을 따라 어셈블리어나 C언어로 구현한다.
2. 각 계층 별 call stack 보는 방법
JAVA
안드로이드 어플 또는 프레임웍 단에서 개발 중 콜 스택을 알아야 할 때가 있다.
원하는 곳에 콜 스택을 보고 싶을 때 아래 코드 한 줄을 추가한다.
Log.d(LOG_TAG, "Stack:", new Throwable("stack dump"));
try/catch 를 이용할 때 아래 코드를 추가한다.
try {
...
} catch(Exception e) { Log.d("Some tag", Log.getStackTraceString(e.getCause().getCause())); }
C
원하는 곳에 콜 스택을 보고 싶을 때 아래 코드 한 줄을 추가한다.
int backtrace(void **buffer, int size);
C++
JB 버전까지 아래 코드로 가능하다.
#includeCallStack stack; stack.update(0, 31); stack.dump();
KK 이후 버전에서는 위 코드는 오류가 나며 다른 방법으로 지원된다.
Kernel
아래와 같이 다양한 콜 스택 출력 방법이 있다.
dump_stack() |
BUG_ON(), WARN_ON() |
save_stack_trace() |
dump_trace() |
backtrace() |
개인적으로 즐겨쓰는 두 가지 예를 아래에 설명한다.
1) dump_stack
헤더를 포함하고 dump_stack() 추가하면 끝.
#include <linux/kernel.h>dump_stack();
2) WARN_ON 사용
조건 필요 없이 콜 스택 표시하고 싶을 때 사용하는 코드.
WARN_ON (0);
조건을 검사하여 콜 스택 표시하는 코드.
WARN_ON (!sdio_claimed);
'IT > Android' 카테고리의 다른 글
넥서스 5 드라이버 설치. 설치 문제 해결. Install Nexus 5 driver & troubleshooting. (1) | 2015.01.31 |
---|---|
타이젠 폰, 삼성 Z1 vs 샤오미 Mi-3 vs 샤오미 Redmi Note (0) | 2015.01.20 |
[스마트폰 아이폰 5S vs 갤럭시 S5 vs 샤오미 Mi4] 가격, 스펙, 성능 비교 (0) | 2014.08.28 |
[안드로이드 소켓통신] 클라이언트 소켓 앱에, 서버 소켓 커널 드라이버로 (1편) (0) | 2014.08.23 |
[Android memory management] OOM killer vs LMK (0) | 2014.08.06 |