| /******************************************************************************* |
| * Copyright (c) 2010 Nokia 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: |
| * Nokia - Initial API and implementation |
| *******************************************************************************/ |
| #ifndef RUNCONTROLCONTEXT_H_ |
| #define RUNCONTROLCONTEXT_H_ |
| |
| #include "TCFContext.h" |
| #include "AgentAction.h" |
| |
| /** |
| * Parameters for a memory transfer operation. |
| */ |
| struct ReadWriteMemoryParams { |
| ReadWriteMemoryParams(unsigned long address_, unsigned long size_, |
| char* memBuffer_, unsigned long bufferSize_, |
| unsigned long* sizeTransferred_) : |
| address(address_), size(size_), |
| memBuffer(memBuffer_), |
| bufferSize(bufferSize_), |
| sizeTransferred(sizeTransferred_) |
| { } |
| |
| unsigned long address; |
| unsigned long size; |
| char* memBuffer; |
| unsigned long bufferSize; |
| |
| unsigned long* sizeTransferred; |
| }; |
| |
| /* |
| * Context in TCF agent that represents process and thread. |
| * |
| * The virtual methods below may be synchronous or asynchronous. |
| * |
| * When synchronous, they return a TCF error code, which the caller |
| * will report as the TCF reply. |
| * |
| * When asynchronous, they all receive AgentActionParams or a subclass, |
| * whose token and channel should be used for reporting a TCF reply. |
| * |
| * For either type, the methods may throw an AgentException, if they can |
| * immediately detect an error condition for the command, and the caller |
| * will report a TCF error reply for the exception. |
| */ |
| class RunControlContext : public Context { |
| public: |
| RunControlContext(ContextOSID osid, const ContextID& parentID, const ContextID& internalID); |
| |
| /* |
| * Get OS ID of the process or thread. |
| */ |
| ContextOSID GetOSID() const; |
| |
| /** |
| * If true, the context is under control of the debugger. |
| * If not, it is just known to be running as of some recent update |
| * (usually the Processes::getChildren command). |
| */ |
| bool IsDebugging() const { return isDebugging; } |
| /** |
| * Toggle the status of the context being under control of the debugger. |
| * |
| * NOTE: this may be set on a process but not its threads, or vice versa -- it's |
| * up to the implementation to decide. |
| */ |
| void SetDebugging(bool debugging) { isDebugging = debugging; } |
| |
| /** Read memory synchronously, returning TCF error code or throwing exception. */ |
| virtual int ReadMemory(const ReadWriteMemoryParams&) throw (AgentException) = 0; |
| |
| /** Write memory synchronously, returning TCF error code or throwing exception. */ |
| virtual int WriteMemory(const ReadWriteMemoryParams&) throw (AgentException) = 0; |
| |
| /** Resume execution asynchronously. */ |
| virtual void Resume(const AgentActionParams&) throw (AgentException) = 0; |
| |
| /** Suspend execution asynchronously. */ |
| virtual void Suspend(const AgentActionParams&) throw (AgentException) = 0; |
| |
| /** Terminate execution asynchronously. */ |
| virtual void Terminate(const AgentActionParams&) throw (AgentException) = 0; |
| |
| /** Invoke single step and suspend asynchronously. */ |
| virtual void SingleStep(const AgentActionParams&) throw (AgentException) = 0; |
| |
| private: |
| // initialize specific properties. |
| void Initialize(); |
| |
| ContextOSID osID; /* process or thread identifier */ |
| |
| bool isDebugging; |
| }; |
| |
| #endif /* RUNCONTROLCONTEXT_H_ */ |