2010년 8월 4일 수요일

안드로이드 서비스 디버깅 하기 (Attach debugger for service in Android)

서비스만 있는 어플리케이션을 디버깅 할 때 서비스에는 브레이크 포인트를 잡아 놔도 실제로 그 부분이 실행될 때 브레이크가 걸리지 않는다.




액티비티를 debug run 하면 어플리케이션이 시작될 때 화면에 Waiting for Debugger라는 메시지가 잠시 나타났다 사라지고 이클립스에 Debug perspective가 열리게 된다.


액티비티의 브레이크 포인트에서 실행이 멈추고 개발자의 다음 동작을 기다리게 된다.


하지만 서비스만 있는 어플리케이션의 경우 debug run을 해도 위와 같은 화면이 나오지도 않고 서비스에 잡아 놓은 브레이크 포인트는 멈추지 않고 그냥 지나쳐 버린다. 해결책은 명식적으로 서비스를 디버거에 붙이도록 선언해 주는 것이다. android.os.Debug.waitForDebugger(); 를 호출해 주면 된다.

SoftKeyboard 튜토리얼에 디버거를 사용하려면 아래와 같이 수정해주면 된다.

public class SoftKeyboard extends InputMethodService implements KeyboardView.OnKeyboardActionListener {
  @Override
  public void onConfigurationChanged(Configuration newConfig) {
    Log.d("SoftKeyboard", "onConfigurationChanged()");

    android.os.Debug.waitForDebugger();

    super.onConfigurationChanged(newConfig);

    // do something useful....

  }

onConfigurationChanged의 두번째 줄에서 서비스를 명시적으로 디버거에 연결시켜주기 때문에 브레이크 포인트에서 실행이 멈추게 된다.

* 어플리케이션에 액티비티와 서비스가 같이 들어있는 경우에는 액티비티가 먼저 실행되면서 디버거에 연결하기 때문에 서비스에 따로 waitForDebugger()를 호출하지 않아도 서비스에도 브레이크 포인트를 바로 사용할 수 있다.

댓글 없음:

댓글 쓰기