devmgmt.dev 로 장치 관리자를 띄운후 adb 를 설치한다.
adb 드라이버 파일 위치를 지정한다.
연결 확인.
adb 를 리눅스에 연결한다.
#adb devices 로 연결상태 확인
#adb shell logcat
sqlite3 /data/data/com.android.providers.settings/databases/settings.db "INSERT INTO system (name, value) VALUES ('screen_off_timeout', -1);"
#adb shell procrank
vss
rss
pss
uss
strace -p [pid]
자바 바인더 통신을 위해 커널로 내려가기 때문에
동적 메모리 할당
VM : new -> heap
네이티브 영역 : new, malloc --> heap
dlmalloc (공유 라이브러리)
커널 영역 : kmalloc -> slab(캐쉬 : 1회 할당 사이즈에 한계가 있다)
vmalloc -> vm (한계가 없다.속도 느리다.)
SEV_MAPERR
----------------------------------------
메모리가 모자라면 사용하지 않는 메모리를 해제를 하는데, 만약 여유가 없으면 fault 발생한다.
19. native 코드 메모리 문제 검출
#adb shell stop
#adb shell setprop libc.debug.malloc 10 안드로이드 프로퍼티 변경
#adb start
libc debug로 들어가서 문제를 탐지하기 위함
명령을 내린 후 아래와 같이 logcat 에서 탐지 가능
20. 이클립스에서 ddms 보기
---------
오후 강의
디버깅의 역할
소프트웨어에 오류가 있을 때, 원인을 찾아 해결하고자 함.
이 때 왜 이상하게 동작하는지 알아내고 문제를 수정해야하는데
중요한 것은 이로 인해서 사이드 이팩트가 발생하면 안된다.
소프트웨어의 기능이나 설계에 대한 이해없이 급히 수정하다가 이슈가 잡은 만큼 생기거나 더 늘어나는 경우도 실제 있음.
그리고 수정할 때 또 중요한 것은 코드의 전반적인 품질을 유지하거나 향상 시킨다.
수정한 후 가독성이 떨어지거나 구조가 깨지면 이후 코드 관리가 어려워진다.
이슈는 수정했는데 기능의 성능이 떨어져버린다. 이러면 곤란하다.
오류 수정 후 이런 유형의 문제가 또 발생하지 않도록 재발 방지책을 마련한다.
예를 들어 특정 클래스 변수 초기화를 안해서 사용 중 죽었다 라든지 쓰레드 핸들 처리가 문제였다라고하면
이슈 트래커에 올려서 공유를 한다.
프로젝트의 버그 수정 전략
빠른 버그 수정, 늦은 버그 수정이 있는데
늦은 버그 수정이라고 하는 것이 보통 급한 일정에서 다 개발 끝난 후 디버깅을 시작하기
댓글 없음:
댓글 쓰기
국정원의 댓글 공작을 지탄합니다.