출처 : http://blog.naver.com/goodhorror/80101602787

프로그램이 죽는 경우 기본적인 디버깅 방법조차 모르는 경우가 많은 것 같아서 정리를 합니다. 프로그램이 죽어서 Q&A 게시판에 글을 남기실때 이 내용을 반드시 확인하시고 질문을 올려주시기 바랍니다.

  

프로그램이 죽는 경우라 하면 먼저 위와 같은 에러 메시지(Sorry! The application XXXX (process com.xxx.xxx.xxx) has stopped unexpectedly. Please try again. Force close)가 화면에 나타나는 경우를 말합니다.

이 경우 디버깅 화면의 LogCat 메시지를 살펴보면 다음과 같습니다. (로그캣이 뭔지 모르신다면 먼저프로젝트 실행과 디버깅 그리고 단말 세팅 이 글을 읽어보세요)


가장 가까운 마지막 부분 근처에 E 로 찍히고 빨간색으로 표시되는 메시지가 주욱 찍힙니다. 소스 어디에서 어떤 이유로 에러가 발생했는지를 표시해주는 로그로 에러의 해결을 위해 가장 중요한 부분입니다. 

08-05 00:02:14.564: ERROR/AndroidRuntime(12848): Uncaught handler: thread main exiting due to uncaught exception
08-05 00:02:14.774: ERROR/AndroidRuntime(12848): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.android.apis/com.example.android.apis.view.Gallery1}: java.lang.NullPointerException
08-05 00:02:14.774: ERROR/AndroidRuntime(12848):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2268)
08-05 00:02:14.774: ERROR/AndroidRuntime(12848):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2284)
08-05 00:02:14.774: ERROR/AndroidRuntime(12848):     at android.app.ActivityThread.access$1800(ActivityThread.java:112)
08-05 00:02:14.774: ERROR/AndroidRuntime(12848):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1692)
08-05 00:02:14.774: ERROR/AndroidRuntime(12848):     at android.os.Handler.dispatchMessage(Handler.java:99)
08-05 00:02:14.774: ERROR/AndroidRuntime(12848):     at android.os.Looper.loop(Looper.java:123)
08-05 00:02:14.774: ERROR/AndroidRuntime(12848):     at android.app.ActivityThread.main(ActivityThread.java:3948)
08-05 00:02:14.774: ERROR/AndroidRuntime(12848):     at java.lang.reflect.Method.invokeNative(Native Method)
08-05 00:02:14.774: ERROR/AndroidRuntime(12848):     at java.lang.reflect.Method.invoke(Method.java:521)
08-05 00:02:14.774: ERROR/AndroidRuntime(12848):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
08-05 00:02:14.774: ERROR/AndroidRuntime(12848):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
08-05 00:02:14.774: ERROR/AndroidRuntime(12848):     at dalvik.system.NativeStart.main(Native Method)
08-05 00:02:14.774: ERROR/AndroidRuntime(12848): Caused by: java.lang.NullPointerException
08-05 00:02:14.774: ERROR/AndroidRuntime(12848):     at com.example.android.apis.view.Gallery1.onCreate(Gallery1.java:48)
08-05 00:02:14.774: ERROR/AndroidRuntime(12848):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123)
08-05 00:02:14.774: ERROR/AndroidRuntime(12848):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2231)
08-05 00:02:14.774: ERROR/AndroidRuntime(12848):     ... 11 more


주루룩 선택하고 에러 메시지를 카피&페이스트할 수 있습니다. 여기서 중요한 부분은 굵은 글씨로 표시해보았습니다. 널포인트 익셉션이 발생하고 소스의 어느 어느 위치에서 발생하는지를 표시합니다.

        super.onCreate(savedInstanceState);
setContentView(R.layout.gallery_1);

// Reference the Gallery view
Gallery g = (Gallery) findViewById(R.id.add);
// Set the adapter to our custom adapter (below)
g.setAdapter(new ImageAdapter(this));

// Set a item click listener, and just Toast the clicked position
g.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView parent, View v, int position, long id) {
Toast.makeText(Gallery1.this, "" + position, Toast.LENGTH_SHORT).show();
}
});

// We also want to show context menu for longpressed items in the gallery
registerForContextMenu(g);

해당 소스의 관련 부분을 보고 어디에서 문제가 발생했는지를 확인합니다.

+ Recent posts