/*******************************************************************************
* Copyright (c) 2006, 2009 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 - Revisited the API
*******************************************************************************/
package org.eclipse.cdt.dsf.debug.service;
import java.util.Map;
import org.eclipse.cdt.core.IAddress;
import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
import org.eclipse.cdt.dsf.concurrent.Immutable;
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;
/**
* Breakpoint service interface
*
* @since 1.0
*/
public interface IBreakpoints extends IDsfService {
/**
* Marker interface for a context for which breakpoints can be installed
*/
public interface IBreakpointsTargetDMContext extends IDMContext {}
/**
* Specific breakpoint context
*/
@Immutable
public interface IBreakpointDMContext extends IDMContext {}
/**
* Breakpoint events
*/
public interface IBreakpointsChangedEvent extends IDMEvent<IBreakpointsTargetDMContext> {
public IBreakpointDMContext[] getBreakpoints();
}
public interface IBreakpointsAddedEvent extends IBreakpointsChangedEvent {}
public interface IBreakpointsUpdatedEvent extends IBreakpointsChangedEvent {}
public interface IBreakpointsRemovedEvent extends IBreakpointsChangedEvent {}
/**
* Effective breakpoint data as held by the back-end.
*/
public interface IBreakpointDMData extends IDMData {
public String getBreakpointType();
public String getFileName();
public int getLineNumber();
public String getFunctionName();
public IAddress[] getAddresses();
public String getCondition();
public int getIgnoreCount();
public boolean isEnabled();
public String getExpression();
}
/**
* Retrieves the list of breakpoints installed in the context.
*
* Use getBreakpointDMData() to retrieve individual breakpoints.
*
* @param context the execution context of the breakpoint
* @param drm the list of breakpoints in the execution context
*/
public void getBreakpoints(IBreakpointsTargetDMContext context,
DataRequestMonitor<IBreakpointDMContext[]> drm);
/**
* Retrieves a specific breakpoint from the service.
*
* @param dmc the breakpoint reference
* @param drm the DRM returning the breakpoint data
*/
public void getBreakpointDMData(IBreakpointDMContext dmc,
DataRequestMonitor<IBreakpointDMData> drm);
/**
* Adds a breakpoint on the target.
*
* The breakpoint context is returned in the DRM. The actual breakpoint
* object can be later be retrieved using getBreakpoint(bp_context).
*
* E.g.:
* IBreakpointDMContext ref = insertBreakpoint(...);
* IBreakpointDMData bp = getBreakpointDMData(ref);
*
* If the breakpoint is a duplicate (already set previously), then it is up to
* the back-end to decide if it is an error or not.
*
* @param context the execution context of the breakpoint
* @param attributes the breakpoint attributes
* @param drm the DRM returning the breakpoint reference
*/
public void insertBreakpoint(IBreakpointsTargetDMContext context,
Map<String,Object> attributes,
DataRequestMonitor<IBreakpointDMContext> drm);
/**
* Removes the breakpoint on the target.
*
* If the breakpoint doesn't exist, silently ignore it.
*
* @param dmc the context of the breakpoints to remove
* @param rm the asynchronous request monitor
*/
public void removeBreakpoint(IBreakpointDMContext dmc,
RequestMonitor rm);
/**
* Updates the breakpoint properties on the target.
*
* To add/update/remove a property, simply create a map with
* the desired value(s) for the given key(s).
*
* Properties that affect the breakpoint nature or location
* should not be updated. Instead, the breakpoint should be
* removed then re-inserted.
*
* A null value is used for removal of a property e.g.:
* delta.set(some_key, null);
*
* @param delta the delta properties
* @param dmc the context of the breakpoints to modify
* @param rm the asynchronous request monitor
*/
public void updateBreakpoint(IBreakpointDMContext dmc,
Map<String,Object> delta, RequestMonitor drm);
}