/******************************************************************************* | |
* Copyright (c) 2011 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 BREAKPOINTSERVICE_H_ | |
#define BREAKPOINTSERVICE_H_ | |
#include <map> | |
#include <string> | |
#include <vector> | |
#include "TCFService.h" | |
#include "TCFContext.h" | |
struct Protocol; | |
struct Channel; | |
// | |
// To store the breakpoint info | |
// | |
struct TBreakpoint | |
{ | |
std::vector<std::string> iContextIds; | |
HANDLE procHandle; // Win32 handle of the hosting process | |
std::string hostBreakPointId; // breakpoint ID from host debugger. | |
ContextAddress address; | |
bool enabled; | |
unsigned char originalByte; // original byte where we set the bp. | |
TBreakpoint(): address(0), enabled(true), originalByte(0) | |
{} | |
}; | |
typedef std::map<std::string, TBreakpoint*> TID2BreakpointMap; | |
/* | |
* A list of breakpoints in all processes in the debug session. | |
*/ | |
static TID2BreakpointMap sBreakPointMap; | |
// | |
// Breakpoint service implementation | |
// | |
class BreakpointsService: public TCFService | |
{ | |
public: | |
BreakpointsService(Protocol * proto); | |
const char* GetName(); | |
static void CommandAddBreakpoint(const char *, Channel *); | |
static void CommandRemoveBreakpoint(const char *, Channel *); | |
static int InsertBreak(const TBreakpoint* bpInfo); | |
static int ClearBreak(const TBreakpoint* bpInfo); | |
static TBreakpoint* FindBreakpointByAddress(HANDLE processHandle, unsigned long address); | |
static void RemoveBreakpointsFromMemoryRead(HANDLE, ContextAddress, char*, unsigned long); | |
static void ReInsertBreakpointsAfterMemoryWrite(HANDLE, ContextAddress, char*, unsigned long); | |
static bool ServiceInstalled(); | |
private: | |
static bool sServiceInstalled; | |
}; | |
#endif /* BREAKPOINTSERVICE_H_ */ |