| /******************************************************************************* |
| * Copyright (c) 2006, 2010 Wind River Systems and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * Wind River Systems - initial API and implementation |
| * Ericsson - Modified for additional functionality |
| *******************************************************************************/ |
| package org.eclipse.cdt.dsf.debug.service; |
| |
| import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor; |
| import org.eclipse.cdt.dsf.concurrent.RequestMonitor; |
| import org.eclipse.cdt.dsf.datamodel.IDMContext; |
| import org.eclipse.cdt.dsf.datamodel.IDMData; |
| import org.eclipse.cdt.dsf.datamodel.IDMEvent; |
| import org.eclipse.cdt.dsf.service.IDsfService; |
| |
| /** |
| * This interface provides access to controlling and monitoring the execution |
| * state of a process being debugged. This interface does not actually |
| * provide methods for creating or destroying execution contexts, it doesn't |
| * even have methods for getting labels. That's because it is expected that |
| * higher level services, ones that deal with processes, kernels, or target |
| * features will provide that functionality. |
| * |
| * @since 1.0 |
| */ |
| public interface IRunControl extends IDsfService |
| { |
| /** |
| * Execution context is the object on which run control operations can be |
| * performed. A lot of higher-level services reference this context to build |
| * functionality on top of it, e.g. stack, expression evaluation, registers, etc. |
| */ |
| public interface IExecutionDMContext extends IDMContext {} |
| |
| /** |
| * Context representing a process, kernel, or some other logical container |
| * for execution contexts, which by itself can perform run-control |
| * operations. |
| */ |
| |
| public interface IContainerDMContext extends IExecutionDMContext {} |
| |
| /** Flag indicating reason context state change. */ |
| public enum StateChangeReason { |
| UNKNOWN, USER_REQUEST, STEP, BREAKPOINT, EXCEPTION, CONTAINER, WATCHPOINT, SIGNAL, SHAREDLIB, ERROR, EVALUATION, |
| |
| /** @since 2.1 */ |
| EVENT_BREAKPOINT }; |
| |
| /** |
| * Indicates that the given thread has suspended. |
| */ |
| public interface ISuspendedDMEvent extends IDMEvent<IExecutionDMContext> { |
| StateChangeReason getReason(); |
| } |
| |
| /** |
| * Indicates that the given thread has resumed. |
| */ |
| public interface IResumedDMEvent extends IDMEvent<IExecutionDMContext> { |
| StateChangeReason getReason(); |
| } |
| |
| /** |
| * Indicates that the given container has suspended. |
| */ |
| public interface IContainerSuspendedDMEvent extends ISuspendedDMEvent { |
| /** |
| * Returns the contexts which triggered the resume, which could be |
| * an empty array if not known. |
| */ |
| IExecutionDMContext[] getTriggeringContexts(); |
| } |
| |
| /** |
| * Indicates that the given container has resumed. |
| */ |
| public interface IContainerResumedDMEvent extends IResumedDMEvent { |
| /** |
| * Returns the contexts which triggered the resume, which could be an |
| * empty array if not known. |
| */ |
| IExecutionDMContext[] getTriggeringContexts(); |
| } |
| |
| /** |
| * Indicates that a new execution context was created but may not have |
| * started execution yet. |
| * @since 2.8 |
| */ |
| public interface ICreatedDMEvent extends IDMEvent<IExecutionDMContext> {} |
| |
| /** |
| * Indicates that a new execution context was started. |
| */ |
| public interface IStartedDMEvent extends IDMEvent<IExecutionDMContext> {} |
| |
| /** |
| * Indicates that an execution context has exited. |
| */ |
| public interface IExitedDMEvent extends IDMEvent<IExecutionDMContext> {} |
| |
| /** |
| * Display information for an execution context. |
| */ |
| public interface IExecutionDMData extends IDMData { |
| |
| /** |
| * Reason for the last change in execution state. Could be |
| * <code>null</code> if the service does not support tracking this |
| * information. |
| */ |
| StateChangeReason getStateChangeReason(); |
| } |
| |
| /** |
| * @since 2.1 |
| */ |
| public interface IExecutionDMData2 extends IExecutionDMData { |
| /** |
| * Optional method to return more detail about the suspended event, e.g. |
| * "Divide by zero exception" |
| * @return more detail about the suspended event, or null |
| */ |
| String getDetails(); |
| } |
| |
| /** |
| * Retrieves execution data for given context. |
| * @param dmc Context to retrieve data for. |
| * @param rm Request completion monitor. |
| */ |
| public void getExecutionData(IExecutionDMContext dmc, DataRequestMonitor<IExecutionDMData> rm); |
| |
| /** |
| * Returns execution contexts belonging to the given container context. |
| */ |
| public void getExecutionContexts(IContainerDMContext c, DataRequestMonitor<IExecutionDMContext[]> rm); |
| |
| /* |
| * Run control commands. They all require the IExecutionContext object on |
| * which they perform the operations. |
| */ |
| void canResume(IExecutionDMContext context, DataRequestMonitor<Boolean> rm); |
| void canSuspend(IExecutionDMContext context, DataRequestMonitor<Boolean> rm); |
| boolean isSuspended(IExecutionDMContext context); |
| void resume(IExecutionDMContext context, RequestMonitor requestMonitor); |
| void suspend(IExecutionDMContext context, RequestMonitor requestMonitor); |
| |
| public enum StepType { |
| STEP_OVER, |
| STEP_INTO, |
| STEP_RETURN, |
| INSTRUCTION_STEP_OVER, |
| INSTRUCTION_STEP_INTO, |
| /** |
| * @since 2.0 |
| */ |
| INSTRUCTION_STEP_RETURN }; |
| |
| boolean isStepping(IExecutionDMContext context); |
| void canStep(IExecutionDMContext context, StepType stepType, DataRequestMonitor<Boolean> rm); |
| void step(IExecutionDMContext context, StepType stepType, RequestMonitor requestMonitor); |
| } |