Search in sources :

Example 1 with AndroidNativeAttachConfiguration

use of com.android.tools.ndk.run.attach.AndroidNativeAttachConfiguration in project intellij by bazelbuild.

the class BlazeNativeAndroidDebugger method attachToClient.

@Override
public void attachToClient(Project project, Client client) {
    final String clientDescr = client.getClientData().getClientDescription();
    Module module = null;
    final List<AndroidFacet> facets = ProjectFacetManager.getInstance(project).getFacets(AndroidFacet.ID);
    for (AndroidFacet facet : facets) {
        try {
            final String packageName = ApkProviderUtil.computePackageName(facet);
            if (clientDescr.startsWith(packageName)) {
                module = facet.getModule();
                break;
            }
        } catch (ApkProvisionException ignored) {
        // ignored
        }
    }
    if (module == null) {
        throw new RuntimeException("Cannot find module by package name");
    }
    if (hasExistingSession(project, client)) {
        return;
    }
    // Detach any existing JDWP debug session - reusing an existing session is troublesome
    // because we need to setup a custom XDebugProcess.
    DebuggerSession debuggerSession = findJdwpDebuggerSession(project, getClientDebugPort(client));
    if (debuggerSession != null) {
        debuggerSession.getProcess().stop(false);
    }
    // Create run configuration
    // TODO: Important modification here. Make sure to keep this in refactor.
    // We need a custom BlazeAndroidNativeAttachConfiguration to skip a bunch of launch checks so
    // validate passes.
    ConfigurationFactory factory = BlazeAndroidNativeAttachConfigurationFactory.getInstance();
    String runConfigurationName = String.format("Android Native Debugger (%d)", client.getClientData().getPid());
    RunnerAndConfigurationSettings runSettings = RunManager.getInstance(project).createRunConfiguration(runConfigurationName, factory);
    AndroidNativeAttachConfiguration configuration = (AndroidNativeAttachConfiguration) runSettings.getConfiguration();
    configuration.setClient(client);
    configuration.getAndroidDebuggerContext().setDebuggerType(getId());
    configuration.getConfigurationModule().setModule(module);
    // TODO: Important modification here. Make sure to keep this in refactor.
    // We need to set the correct working dir to find sources while debugging.
    // See BlazeAndroidRunConfigurationDebuggerManager#getAndroidDebuggerState
    AndroidDebuggerState state = configuration.getAndroidDebuggerContext().getAndroidDebuggerState();
    if (state instanceof NativeAndroidDebuggerState) {
        NativeAndroidDebuggerState nativeState = (NativeAndroidDebuggerState) state;
        nativeState.setWorkingDir(WorkspaceRoot.fromProject(project).directory().getPath());
    }
    ProgramRunnerUtil.executeConfiguration(project, runSettings, DefaultDebugExecutor.getDebugExecutorInstance());
}
Also used : DebuggerSession(com.intellij.debugger.impl.DebuggerSession) ApkProvisionException(com.android.tools.idea.run.ApkProvisionException) AndroidDebuggerState(com.android.tools.idea.run.editor.AndroidDebuggerState) NativeAndroidDebuggerState(com.android.tools.ndk.run.editor.NativeAndroidDebuggerState) ConfigurationFactory(com.intellij.execution.configurations.ConfigurationFactory) BlazeAndroidNativeAttachConfigurationFactory(com.google.idea.blaze.android.run.attach.BlazeAndroidNativeAttachConfigurationFactory) RunnerAndConfigurationSettings(com.intellij.execution.RunnerAndConfigurationSettings) AndroidNativeAttachConfiguration(com.android.tools.ndk.run.attach.AndroidNativeAttachConfiguration) Module(com.intellij.openapi.module.Module) NativeAndroidDebuggerState(com.android.tools.ndk.run.editor.NativeAndroidDebuggerState) AndroidFacet(org.jetbrains.android.facet.AndroidFacet)

Aggregations

ApkProvisionException (com.android.tools.idea.run.ApkProvisionException)1 AndroidDebuggerState (com.android.tools.idea.run.editor.AndroidDebuggerState)1 AndroidNativeAttachConfiguration (com.android.tools.ndk.run.attach.AndroidNativeAttachConfiguration)1 NativeAndroidDebuggerState (com.android.tools.ndk.run.editor.NativeAndroidDebuggerState)1 BlazeAndroidNativeAttachConfigurationFactory (com.google.idea.blaze.android.run.attach.BlazeAndroidNativeAttachConfigurationFactory)1 DebuggerSession (com.intellij.debugger.impl.DebuggerSession)1 RunnerAndConfigurationSettings (com.intellij.execution.RunnerAndConfigurationSettings)1 ConfigurationFactory (com.intellij.execution.configurations.ConfigurationFactory)1 Module (com.intellij.openapi.module.Module)1 AndroidFacet (org.jetbrains.android.facet.AndroidFacet)1