use of com.android.tools.idea.run.editor.AndroidDebuggerState in project intellij by bazelbuild.
the class BlazeAndroidLaunchTasksProvider method getConnectDebuggerTask.
@Nullable
@Override
public DebugConnectorTask getConnectDebuggerTask(@NotNull LaunchStatus launchStatus, @Nullable AndroidVersion version) {
if (!isDebug) {
return null;
}
Set<String> packageIds = Sets.newHashSet();
try {
String packageName = applicationIdProvider.getPackageName();
packageIds.add(packageName);
} catch (ApkProvisionException e) {
Logger.getInstance(AndroidLaunchTasksProvider.class).error(e);
}
try {
String packageName = applicationIdProvider.getTestPackageName();
if (packageName != null) {
packageIds.add(packageName);
}
} catch (ApkProvisionException e) {
// not as severe as failing to obtain package id for main application
Logger.getInstance(AndroidLaunchTasksProvider.class).warn("Unable to obtain test package name, will not connect debugger " + "if tests don't instantiate main application");
}
AndroidDebugger androidDebugger = debuggerManager.getAndroidDebugger();
AndroidDebuggerState androidDebuggerState = debuggerManager.getAndroidDebuggerState(project);
if (androidDebugger == null || androidDebuggerState == null) {
return null;
}
try {
return runContext.getDebuggerTask(androidDebugger, androidDebuggerState, packageIds, monitorRemoteProcess());
} catch (ExecutionException e) {
launchStatus.terminateLaunch(e.getMessage());
return null;
}
}
use of com.android.tools.idea.run.editor.AndroidDebuggerState in project android by JetBrains.
the class AndroidLaunchTasksProvider method getConnectDebuggerTask.
@Nullable
@Override
public DebugConnectorTask getConnectDebuggerTask(@NotNull LaunchStatus launchStatus, @Nullable AndroidVersion version) {
if (!myLaunchOptions.isDebug()) {
return null;
}
Logger logger = Logger.getInstance(AndroidLaunchTasksProvider.class);
Set<String> packageIds = Sets.newHashSet();
try {
String packageName = myApplicationIdProvider.getPackageName();
packageIds.add(packageName);
} catch (ApkProvisionException e) {
logger.error(e);
}
try {
String packageName = myApplicationIdProvider.getTestPackageName();
if (packageName != null) {
packageIds.add(packageName);
}
} catch (ApkProvisionException e) {
// not as severe as failing to obtain package id for main application
logger.warn("Unable to obtain test package name, will not connect debugger if tests don't instantiate main application");
}
AndroidDebuggerContext androidDebuggerContext = myRunConfig.getAndroidDebuggerContext();
AndroidDebugger debugger = androidDebuggerContext.getAndroidDebugger();
if (debugger == null) {
logger.warn("Unable to determine debugger to use for this launch");
return null;
}
logger.info("Using debugger: " + debugger.getId());
AndroidDebuggerState androidDebuggerState = androidDebuggerContext.getAndroidDebuggerState();
if (androidDebuggerState != null) {
//noinspection unchecked
return debugger.getConnectDebuggerTask(myEnv, version, packageIds, myFacet, androidDebuggerState, myRunConfig.getType().getId(), monitorRemoteProcess());
}
return null;
}
use of com.android.tools.idea.run.editor.AndroidDebuggerState in project intellij by bazelbuild.
the class BlazeAndroidRunConfigurationDebuggerManager method writeExternal.
@Override
public void writeExternal(Element element) throws WriteExternalException {
for (Map.Entry<String, AndroidDebuggerState> entry : androidDebuggerStates.entrySet()) {
Element optionElement = new Element(entry.getKey());
element.addContent(optionElement);
entry.getValue().writeExternal(optionElement);
}
}
use of com.android.tools.idea.run.editor.AndroidDebuggerState 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());
}
Aggregations