지나주 MYPI

지나주
접속 : 3605   Lv. 41

Category

Profile

Counter

  • 오늘 : 58 명
  • 전체 : 130381 명
  • Mypi Ver. 0.3.1 β
[게임 개발] Android 개발시 런타임 에러 메시지 (2) 2014/08/02 PM 02:11

안드로이드, 이클립스 개발 환경에서는 휴대폰에서 앱을 실행시키더라도 LogCat 창을 통해 각종 메시지를 확인할 수 있습니다.

덕분에 앱이 문제를 일으킬 때에 유용한 자료를 얻을 수 있었는데요.
이번에 "착한 포커"에 새로운 AdMob 광고를 붙이다가 깨달은 바가 있었습니다.

런타임시에 아래와 같은 에러 메시지를 남기고 앱이 죽었는데요.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
08-02 09:23:55.117: E/AndroidRuntime(10655): FATAL EXCEPTION: main
08-02 09:23:55.117: E/AndroidRuntime(10655): java.lang.Error: FATAL EXCEPTION [main]
08-02 09:23:55.117: E/AndroidRuntime(10655): Unity version : 4.5.2f1
08-02 09:23:55.117: E/AndroidRuntime(10655): Device model : samsung SHV-E210S
08-02 09:23:55.117: E/AndroidRuntime(10655): Device fingerprint: samsung/c1skt/c1skt:4.3/JSS15J/E210SKSUGND1:user/release-keys
08-02 09:23:55.117: E/AndroidRuntime(10655): Caused by: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.******.*********/com.******.*********.AndroidPlugin}: java.lang.NullPointerException
08-02 09:23:55.117: E/AndroidRuntime(10655): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2305)
08-02 09:23:55.117: E/AndroidRuntime(10655): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2359)
08-02 09:23:55.117: E/AndroidRuntime(10655): at android.app.ActivityThread.access$700(ActivityThread.java:165)
08-02 09:23:55.117: E/AndroidRuntime(10655): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1326)
08-02 09:23:55.117: E/AndroidRuntime(10655): at android.os.Handler.dispatchMessage(Handler.java:99)
08-02 09:23:55.117: E/AndroidRuntime(10655): at android.os.Looper.loop(Looper.java:176)
08-02 09:23:55.117: E/AndroidRuntime(10655): at android.app.ActivityThread.main(ActivityThread.java:5455)
08-02 09:23:55.117: E/AndroidRuntime(10655): at java.lang.reflect.Method.invokeNative(Native Method)
08-02 09:23:55.117: E/AndroidRuntime(10655): at java.lang.reflect.Method.invoke(Method.java:525)
08-02 09:23:55.117: E/AndroidRuntime(10655): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1209)
08-02 09:23:55.117: E/AndroidRuntime(10655): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1025)
08-02 09:23:55.117: E/AndroidRuntime(10655): at dalvik.system.NativeStart.main(Native Method)
08-02 09:23:55.117: E/AndroidRuntime(10655): Caused by: java.lang.NullPointerException
08-02 09:23:55.117: E/AndroidRuntime(10655): at com.******.*********.GoogleAdMob$1.run(GoogleAdMob.java:33)
08-02 09:23:55.117: E/AndroidRuntime(10655): at android.app.Activity.runOnUiThread(Activity.java:4893)
08-02 09:23:55.117: E/AndroidRuntime(10655): at com.******.*********.GoogleAdMob.setup(GoogleAdMob.java:31)
08-02 09:23:55.117: E/AndroidRuntime(10655): at com.******.*********.AndroidPlugin.onCreate(AndroidPlugin.java:41)
08-02 09:23:55.117: E/AndroidRuntime(10655): at android.app.Activity.performCreate(Activity.java:5372)
08-02 09:23:55.117: E/AndroidRuntime(10655): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1104)
08-02 09:23:55.117: E/AndroidRuntime(10655): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2267)
08-02 09:23:55.117: E/AndroidRuntime(10655): ... 11 more
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

에러 메시지가 너무 길죠?
그래서 저는 항상 제일 위에 찍힌 에러 메시지에만 확인했었습니다.

Caused by: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.******.*********/com.******.*********.AndroidPlugin}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2305)

하지만 위 내용만 보서는 NullPointerException이 발생하긴 했는데, 어떻게 찾아야 할 지 알 수 없습니다.
android.app.ActivityThread는 제 코드가 아니라 안드로이드 SDK의 코드이거든요. ㅠㅠ


그래서 막연한 마음에 구글링 하던 중, 한 선각자의 뜻깊은 조언을 발견했습니다.
"출력된 에러 메시지에서 중간에 있는 메시지가 의미 있는 것이다"
두 눈을 씻고 다시 확인해 보니 아래 메시지가 눈에 띄네요.

Caused by: java.lang.NullPointerException
at com.******.*********.GoogleAdMob$1.run(GoogleAdMob.java:33)

그렇습니다. com.******.*********.GoogleAdMob 은 제가 작성한 코드입니다.
GoogleAdMob.java의 33번째 줄에 있는 run 함수 내에 객체 new 할당을 안해서 발생했던 문제였습니다.


항상 런타임 에러 메시지를 만나면 가장 위에 있는 메시지만 확인하고, 아래 내용은 무시했었거든요.
그래서 문제점들을 확인하지 못한 상황이 여러 차례 있었는데...
이제는 좀 더 디버깅에 자신이 생길 것 같습니다. :)

신고

 

글라도스λ    친구신청

게임개발할때 구글 리더보드 연동과 더불어 가장 번거로웠던 부분이었네요..
다음에 또 헤매지 않으려고 블로그에 메뉴얼처럼 기록해뒀었던 기억이납니다 -_-;;

지나주    친구신청

앗, 나중에 어려운 일이 생기면 도움을 부탁해도 될까요?
X