Debugging a service

2019-01-07 12:45发布

I have written a service with a remote interface and installed it on my PC's Eclipse AVD. I have a client test harness which starts and invokes methods in the service. Initially I had the service installed by a control class and activity, which I have now removed, so that the manifest for the service looks like:

<?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>   

so there's no activity tag.

When I launch it from the debug icon in Eclipse, the console tells me it's installing the apk (which it is), but it does not appear as a debug thread and breakpoints aren't triggered, although the service's behaviour is OK as far as the client sees it. If I wrap the service tag in an activity tag which has an associated class and launch that, then I can debug it

Is it possible to debug the service without wrapping it in an activity?

5条回答
做个烂人
2楼-- · 2019-01-07 13:12

just make sure you don't forget this line of code in your code and release your apk. if you try running your app without the debugger the line below will get stuck.

android.os.Debug.waitForDebugger();

also you can use the following to determine if the debugger is connected:

android.os.Debug.isDebuggerConnected(); //Determine if a debugger is currently attached.
查看更多
我只想做你的唯一
3楼-- · 2019-01-07 13:13

enter image description here

Edit 2018 button icon changed

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.

查看更多
爷的心禁止访问
4楼-- · 2019-01-07 13:24

Here's what you can do in four steps:

First: In the first interesting method of your service (I used on create):

/* (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
}

Second: set break points after the waitForDebuggerCommand.

Third: Launch app via debug button in Eclipse. (You should probably have removed the main launch activity from the manifest by now)

Last: Launch adb and run the command to start a service:

  • cd $PLATFORM_TOOLS
  • adb shell
  • am startservice -n com.google.android.apps.gtalkservice/com.google.android.gtalkservice.service.GTalkService
查看更多
混吃等死
5楼-- · 2019-01-07 13:31

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
查看更多
相关推荐>>
6楼-- · 2019-01-07 13:33

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

查看更多
登录 后发表回答