Program Tip

서비스 디버깅

programtip 2021. 1. 10. 19:31
반응형

서비스 디버깅


원격 인터페이스로 서비스를 작성하고 내 PC의 Eclipse AVD에 설치했습니다. 서비스에서 메서드를 시작하고 호출하는 클라이언트 테스트 장치가 있습니다. 처음에는 컨트롤 클래스 및 활동에 의해 서비스를 설치했으며, 이제 제거 했으므로 서비스의 매니페스트는 다음과 같습니다.

<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.myname.gridservice"
android:versionCode="1"
android:versionName="1.0">
<application
    android:icon="@drawable/icon"
    android:label="@string/app_name"
    android:debuggable="true">
    <service
        android:enabled="true"
        android:debuggable="true"
        android:name="OverlayService">
        <intent-filter>
            <action android:name="com.myname.OverlayService.SERVICE"/>
            <action android:name="com.myname.gridservice.IRemoteInterface" />
        </intent-filter>
    </service>
 </application>  
</manifest>   

활동 태그가 없습니다.

Eclipse의 디버그 아이콘에서 실행하면 콘솔에서 apk를 설치 중이라고 알려 주지만 디버그 스레드로 표시되지 않고 중단 점이 트리거되지는 않지만 서비스의 동작은 괜찮습니다. 클라이언트는 그것을 본다. 연결된 클래스가있는 활동 태그에 서비스 태그를 래핑하고 시작하면 디버그 할 수 있습니다.

활동에 래핑하지 않고 서비스를 디버깅 할 수 있습니까?


4 단계로 수행 할 수있는 작업은 다음과 같습니다.

첫 번째 : 서비스의 첫 번째 흥미로운 방법 (생성시 사용) :

/* (non-Javadoc)    
 * @see android.app.Service#onCreate()
 */
@Override
public void onCreate() {
    super.onCreate();
    //whatever else you have to to here...
    android.os.Debug.waitForDebugger();  // this line is key
}

두 번째 : waitForDebugger명령 뒤에 중단 점을 설정합니다 .

세 번째 : IDE의 디버그 버튼을 통해 앱을 실행합니다 (Eclipse / Android Studio / ...). (지금까지 매니페스트에서 기본 시작 활동을 제거했을 것입니다.)

마지막 : adb를 시작하고 명령을 실행하여 서비스를 시작합니다.

  • cd $PLATFORM_TOOLS
  • adb shell
  • am startservice -n com.google.android.apps.gtalkservice/com.google.android.gtalkservice.service.GTalkService

코드에서이 코드 줄을 잊지 말고 apk를 해제하십시오. 디버거없이 앱을 실행하려고하면 아래 줄이 멈 춥니 다.

android.os.Debug.waitForDebugger();

또한 다음을 사용하여 디버거가 연결되었는지 확인할 수 있습니다.

android.os.Debug.isDebuggerConnected(); //Determine if a debugger is currently attached.

enter image description here

2018 편집 버튼 아이콘이 변경됨

enter image description here

enter image description here

This is pretty simple, you can connect to your application service. Assuming that running the debugger doesn't work, you can press the choose process option by pressing the debug with an arrow icon pictured above. Select your service and you should now be able to debug your service.


I think it should be done programmatically with android.os.Debug.waitForDebugger();


This works in Android Studio. There might be a similar way in Eclipse I suppose.

  1. run your project in debug mode
  2. attach debugger to your service process

ReferenceURL : https://stackoverflow.com/questions/4008081/debugging-a-service

반응형