blob: 7aae7bb2c6f78c70acb939812f2ef19ef3e633fc [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010, 2014 Ericsson and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Ericsson - Initial API and implementation
* Dmitry Kozlov (Mentor Graphics) - Enhance trace status (Bug 390827)
*******************************************************************************/
package org.eclipse.cdt.dsf.gdb.service;
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;
/**
* The TraceControl service provides access to the debugger Tracing functionality.
* It is used to do such things as start and stop tracing.
*
* @since 3.0
*/
public interface IGDBTraceControl extends IDsfService {
/**
* Marker interface for a context on which trace operations can be performed
*/
public interface ITraceTargetDMContext extends IDMContext {
}
/**
* Specific Trace Record context. It describes tracing data.
*/
@Immutable
public interface ITraceRecordDMContext extends IDMContext {
/**
* Returns the GDB id to the trace record. Can return null
* if the context does not point to a valid trace record.
* @since 4.0
*/
String getRecordId();
}
/**
* This is the model data interface that corresponds to ITraceRecordDMContext.
*/
public interface ITraceRecordDMData extends IDMData {
/**
* Return the content of the trace record in the form of a string
* @since 4.0
*/
String getContent();
/**
* Return the timestamp of the trace record. Can return null.
* @since 4.0
*/
String getTimestamp();
/**
* Return the GDB tracepoint number
* @since 4.0
*/
String getTracepointNumber();
/**
* Returns the GDB id to the trace record
* @since 4.0
*/
String getRecordId();
}
/**
* Trace events
*/
public interface ITracingSupportedChangeDMEvent extends IDMEvent<ITraceTargetDMContext> {
boolean isTracingSupported();
}
public interface ITracingStartedDMEvent extends IDMEvent<ITraceTargetDMContext> {
}
public interface ITracingStoppedDMEvent extends IDMEvent<ITraceTargetDMContext> {
}
public interface ITraceRecordSelectedChangedDMEvent extends IDMEvent<ITraceRecordDMContext> {
boolean isVisualizationModeEnabled();
}
/**
* Returns whether tracing can be started on the specified trace target
*/
public void canStartTracing(ITraceTargetDMContext context, DataRequestMonitor<Boolean> rm);
/**
* Start tracing on the specified trace target
*/
public void startTracing(ITraceTargetDMContext context, RequestMonitor rm);
/**
* Returns whether tracing can be stopped on the specified trace target
*/
public void canStopTracing(ITraceTargetDMContext context, DataRequestMonitor<Boolean> rm);
/**
* Stop tracing on the specified trace target
*/
public void stopTracing(ITraceTargetDMContext context, RequestMonitor rm);
/**
* Returns true if tracing is ongoing.
*/
public void isTracing(ITraceTargetDMContext context, DataRequestMonitor<Boolean> rm);
/**
* Returns true if trace data can be saved to file
*/
public void canSaveTraceData(ITraceTargetDMContext context, DataRequestMonitor<Boolean> rm);
/**
* Save trace data (all trace records) to the specified file in a format suitable for {@link loadTraceData}
* If 'remoteSave' is true, the storage will be done on the target.
*/
public void saveTraceData(ITraceTargetDMContext context, String file, boolean remoteSave, RequestMonitor rm);
/**
* Returns true if trace data can be loaded from a file
*/
public void canLoadTraceData(ITraceTargetDMContext context, DataRequestMonitor<Boolean> rm);
/**
* Load trace data (all trace records) from the specified file. A file created from a call to
* {@link saveTraceData} should have the correct format to be loaded by this call.
*/
public void loadTraceData(ITraceTargetDMContext context, String file, RequestMonitor rm);
/**
* Request that the backend use the specified trace record.
*/
public void selectTraceRecord(ITraceRecordDMContext context, RequestMonitor rm);
/**
* Get the data associated to current GDB tracepoint record
*/
public void getTraceRecordData(ITraceRecordDMContext context, DataRequestMonitor<ITraceRecordDMData> rm);
/////////////////////////////////////////////////
// GDB specific part
/////////////////////////////////////////////////
public static enum STOP_REASON_ENUM {
REQUEST, PASSCOUNT, OVERFLOW, DISCONNECTION, ERROR, UNKNOWN
}
public interface ITraceStatusDMData extends IDMData {
boolean isTracingSupported();
boolean isTracingActive();
int getNumberOfCollectedFrame();
int getTotalBufferSize();
int getFreeBufferSize();
STOP_REASON_ENUM getStopReason();
/**
* Returns the id of the tracepoint that caused the stop.
* Should be null if getStopReason() is null
*/
Integer getStoppingTracepoint();
}
/** @since 4.4 */
public interface ITraceStatusDMData2 extends ITraceStatusDMData {
/**
* Returns the user-name of the user that started or stopped a trace. Returns an
* empty string if no user-name is available.
*/
String getUserName();
/**
* Returns the traces notes related to a started or stopped trace. Returns an
* empty string if no notes are defined.
*/
String getNotes();
/**
* Returns the start-time of an on-going trace.
* Returns an empty string if no start-time is available or if no trace was started.
*/
String getStartTime();
/**
* Returns the stop-time of the last trace experiment.
* Returns an empty string if no stop-time is available, if a trace is currently
* running or if no trace was ever started.
*/
String getStopTime();
/**
* Returns true if trace visualization is done from a trace file
* as compared to one from an ongoing execution.
*/
boolean isTracingFromFile();
/**
* Returns true if an ongoing tracing experiment will continue after
* GDB disconnects from the target.
*/
boolean isDisconnectedTracingEnabled();
/**
* Returns true if the buffer being used or to be used to record
* the trace data is a circular buffer (overwriting/flight-recorder), or not.
*/
boolean isCircularBuffer();
/**
* Returns the number of created frames of the current trace experiment.
*/
int getNumberOfCreatedFrames();
/**
* Returns the error description if the trace was stopped due to an error (getStopReason() returns ERROR).
* Returns null if the trace is not stopped, or if it is not stopped by an ERROR.
* Can return an empty string in other cases if no description is available.
*/
String getStopErrorDescription();
/**
* Returns the trace file path when isTracingFromFile() is true. Can return
* an empty string if the file path is not available.
* Should return null if isTracingFromFile() is false;
*/
String getTraceFile();
/**
* If a trace frame is currently being examined, this method will return
* its id. Returns null if no trace frame is in focus.
*/
String getCurrentTraceFrameId();
/**
* If a trace frame is currently being examined, this method will return
* the GDB tracepoint number that triggered the trace record in focus.
* Returns null if no trace frame is in focus (if getCurrentTraceFrameId() == null).
*/
Integer getTracepointNumberForCurrentTraceFrame();
}
public interface ITraceVariableDMData extends IDMData {
String getName();
String getValue();
String getInitialValue();
}
/**
* Request the tracing status of the specified trace target
*/
public void getTraceStatus(ITraceTargetDMContext context, DataRequestMonitor<ITraceStatusDMData> rm);
/**
* Create a new trace state variable with an optional value
*/
public void createTraceVariable(ITraceTargetDMContext context, String varName, String varValue, RequestMonitor rm);
/**
* Get a list of all trace state variables and their values
*/
public void getTraceVariables(ITraceTargetDMContext context, DataRequestMonitor<ITraceVariableDMData[]> rm);
/** @since 4.0 */
public ITraceRecordDMContext createTraceRecordContext(ITraceTargetDMContext ctx, String recordId);
public void getCurrentTraceRecordContext(ITraceTargetDMContext context,
DataRequestMonitor<ITraceRecordDMContext> drm);
public ITraceRecordDMContext createNextRecordContext(ITraceRecordDMContext ctx);
public ITraceRecordDMContext createPrevRecordContext(ITraceRecordDMContext ctx);
}