태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

런타임 에러(Run-time Error)에 대처하는 방법!

2009.08.31 06:02


This application has stopped unexpectedly. Please try again.


안드로이드 어플리케이션 개발을 하다보면, 예상치 못한 에러가 발생하는 경우가 많습니다.
분명히 이클립스상에서는 오류가 없다고 나왔는데, 막상 어플리케이션을 실행해보면 오류가 뜬다구요?
게다가, 무슨 오류인지 제데로 나오지도 않아서 뭘 고쳐야 할지 잘 모르겠다구요?

이번 글에서는 이런 오류에 대처하는 방법에 대해 알아보도록 하겠습니다.

이런 오류는 코드 작성시에는 보이지 않지만, 실행해보면 발생하는 오류라 하여, 런타임 오류(Run-time Error)라 불립니다. 이런 오류가 발생하는 이유는 여러 가지가 있지만, 대표적인 이유는 객체의 생성자가 실행되지도 않않는데 객체를 사용하려고 할 때, 그리고 특정 뷰(View)를 사용할 때에는 그에 맞는 id를 지정해주어야 하는데, 그렇지 못할 경우 등등.. 입니다.

자, 그럼 이런 오류가 발생했을 때의 화면을 볼까요?

아악! 이건 뭐 뭐가 오류난건지도 모르겠고....



이클립스 개발 환경에서 코딩을 할 때는 오류가 있으면 어디에 오류가 있다고 에러가 뜨는데, 이건 뭐 이렇게 오류가 발생했다고만 뜨고 마니... 답답하기 짝이 없습니다. 알아서 고치라는 것도 아니고.... 하지만, 이러한 오류도 자세한 정보를 확인할 수 있는 방법이 있습니다. 바로, LogCat을 사용하면 됩니다.

LogCat은 안드로이드 에뮬레이터에서 발생하는 여러 이벤트들을 보여주는데, 런타임 오류가 발생한 경우 그 오류가 무엇 때문에 발생했는지까지도 보여주게 됩니다. 그럼, 이 오류가 왜 발생했는제 LogCat을 통해 한번 확인해볼까요?


  1. 이클립스 오른쪽 상단의 [DDMS]화면을 클릭합니다. [DDMS]화면이 없다면 Window-Open Perspective-DDMS를 눌러 DDMS버튼을 추가합니다. 자세한 방법은 여기를 참고하세요.

  2. 하단에 LogCat 화면이 보일겁니다. LogCat에 찍힌 정보를 확인해볼까요?

    클릭하면 크게 보여요~


    으으...뻘건 화면으로 가득하군요.....
    여러가지 잡다한 것들이 가득하지만, 가장 중요한 것은 중간쯤에 보면 Caused by.. 뒷부분의 내용입니다. 요놈 떄문에 에러가 난 것이기 때문이죠. 내용을 한번 볼까요?

    08-30 20:30:34.949: ERROR/AndroidRuntime(883):
    Caused by: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list'

    아, 드디어(?) 이유를 알았습니다. ListActivity를 사용하면서 ListView의 아이디를 android:id/list로 지정해주지 않았군요! 원인을 찾았으니 문제를 해겷하고, 다시 실행해볼까요?




    깔끔하게 잘 실행되는군요! 성공입니다.

이렇게  LogCat을 이용하면 각종 런타임 에러의 정보를 확인해볼 수 있습니다. 뿐만 아니라, 어플리케이션 내의 사이클, 혹은 이벤트가 발생했을 때 LogCat을 통해 그 정보가 표시되도록 하면 개발시  매우 편리합니다.

예제에서는 일부러(?) id를 바꿔서 에러가 발생되도록 하였지만, 실제 개발을 진행하다보면 별별 오류가 다 납니다. -_-; 그런 오류에 대한 것들은 직접 검색을 해 보면서 그 원인을 찾아보고 분석해보다보면 개발 경험에 많은 도움이 될 것입니다.

저작자 표시 비영리 변경 금지
신고

커니 안드로이드 개발 팁/일반 , , , , , , , , , ,

  1. 쿨럭.ㅠ.ㅠ 저레서.ㅡ.ㅡ 날려먹었던 예제가 몇개이던지`~~~..
    이다음부터는.ㅡ.ㅡ... 날려먹지는 않겠습니다^^..ㅋㅋㅋㅋㅋ..

    안드로이드 책 2독 시작해야되는데.ㅡ.ㅡ;학기 시작이군요...^^..

  2. 후아~ 저도 공부해야할것들이 산더미인데.... 요새 진도가 잘 나가질 않네요..ㅠㅠ

  3. Blog Icon
    소망아기

    자료들 잘 보고 있습니다.
    이 자료 내용중에 DDMS에 Logcat이라고 하셨는데, Debug의 LogCat이 아닌가 싶네요 ^^

  4. LogCat화면은 사실 Debug Perspective, DDMS Perspective 모두에 존재합니다. 딱히 어느 곳에 들어가있다고 하기는 어렵구요.

    일반적으로 저는 코딩을 하다가 런타임 에러 내용을 보기 위해 DDMS Perspective를 선택한 후, LogCat화면을 전체 화면으로 띄워놓습니다. :) 사실 개발 과정에서는 프로세스 목록이나 파일 익스플로러는 많이 쓸일이 없죠~

  5. Blog Icon
    소망아기

    아 DDMS에도 LogCat이 있었네요..
    커니님이 사용하는 방법이 더 편할 것 같네요..
    의외의 부분에서 하나 배워갑니다 ^^

  6. Blog Icon
    sena

    커니님 로그캣 사용 방법을 자세히 알려주시면 안될까요?
    알아보니 로그캣에 저런 로그가 보이게 하려면 로그켓 코드를 넣어야한다고 하더라구요.

    인텐트 실습중에 에러가 나서 로그캣을 확인해 봤는데
    아무것도 출력되지 않아서...
    질문 올려봅니다.

    위에 커니님이 올려놓으신 로그는 로그캣 코드 없이도 출력되는건가요??

  7. 위에 보이는 로그들은 제가 출력하는 것이 아니라 안드로이드 시스템 내의 다른 어플리케이션 혹은 서비스들에서 출력하는 로그입니다. 에러가 난 경우 알아서 로그로 출력해주죠.

    어플리케이션을 작성하면서 값을 추적하려고 하는 경우에는 Log클래스(android.util.Log)의 메소드들을 이용하면 됩니다.

    http://developer.android.com/reference/android/util/Log.html

  8. 일단 sdk 폴더내에 tool 폴더를 path 걸어주시면 편하게 사용하실수있습니다. adb , emulator , android 등 자주 사용하는것들이 거기에 있거든요.. path걸어주고cmd창에서 adb logcat 하시면 단순하게 log메세지는 보실수 있습니다. 특히 에뮬이 실행과 동시에 메세지가 나오기 때문에 ddms창이 떠서 연결되기 전 부분은 이렇게 확인 하실수 있으실겁니다. 저도 무한삽질을 하면서(이곳사이트에 와서 그나마 덜 하고 있지만 ㅋ) 대부분의 system dialog msg는 main.xml 파일에서 실수를 한게 많더군요.. 특히 R.java 생성과 문제가 많이 되고 있습니다. ㅋ 운영자님의 노고가 이곳에서 특히 더 보이는군요..본인의 무한삽질의 경험치를 이렇게 쉽게 공개하시다니 감동입니다 ㅎ

  9. Blog Icon
    쓰폭

    로그캣 추가해서 실행해도 로그캣 창에 아무것도 안뜨네요 ㅠㅠ

  10. Devices 에서 에뮬레이터가 선택되어 있는지 확인해보세요~

  11. Blog Icon
    lemon.A.D

    감사합니다, 덕분에 시간이 줄었습니다. ^^

  12. Blog Icon
    밝은미소

    감사합니다. 정말 유용한 정보입니다. ^^

  13. Blog Icon
    1111

    좋은 정보 감사합니다. 프로그램 에러 쪽 문제는 골치가 아프군요^^

  14. Blog Icon
    아놀드

    초보인데요 삼성 스마트폰(3G)에서 스위시로 만든 영상을 HTML5의 object명령을 써서 간단히 코딩해서 플레이 시키면 내 스마트폰에서는 스위시 영상이 잘 플레이 됩니다.

    그런데 이 스위시 영상을 다른 사람 스마트폰으로 전송하면 그 사람 스마트폰에서는 소리만 들리고 영상은 뜨지를 않습니다.
    어찌해야 하는지요.

  15. 정확히 스위시가 어떤 것인지 모르겠습니다. 기기별로 결과가 다르다면 기기 특성으로 인한 문제인 것 같은데, 자세한 내용을 몰라 원하는 답변을 드리기 어려울 것 같네요.
    그리고 HTML을 사용하신다는 것을 보니 하이드리드 앱이거나 Webview / ChromiumView를 사용하는 것 같은데, 4.4부터는 Webview를 지원하지 않기 때문에 플러그인 문제일 가능성이 높습니다. 이 부분을 한번 확인 해 보셔야 할 듯 합니다.

  16. Blog Icon
    starseat

    로그캣 관련 질문인데요..
    로그캣을 띄웠는데 어떻게 봐야 할지를 모르겠습니다.
    이 글을 읽고 오류나는 부분을 찾아보려 하였지만
    제 로그캣에는

    All messages (no filters)
    (제가 태그명 정한 로그)
    패키지명 (Session Filter)

    이런식으로 3개만 되어있습니다.

    위에 작성하신것처럼
    ERROR/AndroidRuntime(883):
    Caused by: ....

    이런식으로 보려면 어떻게 설정을 해야 되는건가요?

    All messages 로는 로그가 너무 많고
    계속 업데이트가 되어 밑으로 내려가는 통에
    확인이 잘 안됩니다...
    스크롤 락 을 걸고 보아도
    너무 헷갈리네요...

    아! 그리고 로그 볼때
    굳이 DDMS 로 가지 않더라도
    Java EE (저는 이걸로 작업합니다.)
    에서 하단에 LogCat 으로 봐도 대는거죠?
    (혹시나 하구요...)

  17. Blog Icon
    starseat

    (Session Filter) 에
    다 나오는듯하네요;;
    이 글을 작성할때는 안나와서
    몰랐는데
    이부분으로 보면 될듯 하네요

    혹시 다른방법 있으신가요?