본문 바로가기

안드로이드 개발 팁/일반

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


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