| /******************************************************************************* | |
| * 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_ */ |