roxiedebug.ipp 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. /*##############################################################################
  2. HPCC SYSTEMS software Copyright (C) 2012 HPCC Systems®.
  3. Licensed under the Apache License, Version 2.0 (the "License");
  4. you may not use this file except in compliance with the License.
  5. You may obtain a copy of the License at
  6. http://www.apache.org/licenses/LICENSE-2.0
  7. Unless required by applicable law or agreed to in writing, software
  8. distributed under the License is distributed on an "AS IS" BASIS,
  9. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  10. See the License for the specific language governing permissions and
  11. limitations under the License.
  12. ############################################################################## */
  13. #ifndef ROXIEDEBUG_IPP
  14. #define ROXIEDEBUG_IPP
  15. #include "thorhelper.hpp"
  16. #include "thorcommon.hpp"
  17. #include "roxiehelper.ipp"
  18. enum DebugState
  19. {
  20. DebugStateCreated,
  21. DebugStateLoading,
  22. DebugStateRunning,
  23. DebugStateEdge,
  24. DebugStateBreakpoint,
  25. DebugStateGraphCreate,
  26. DebugStateGraphStart,
  27. DebugStateGraphEnd,
  28. DebugStateException,
  29. DebugStateGraphAbort,
  30. DebugStateReady,
  31. DebugStateFailed,
  32. DebugStateFinished,
  33. DebugStateUnloaded,
  34. DebugStateQuit,
  35. DebugStateDetached,
  36. DebugStateLimit,
  37. DebugStateGraphFinished
  38. };
  39. enum BreakpointMode
  40. {
  41. BreakpointModeNone,
  42. BreakpointModeEdge,
  43. BreakpointModeNode,
  44. BreakpointModeGraph,
  45. BreakpointModeGlobal
  46. };
  47. enum BreakpointActionMode
  48. {
  49. BreakpointActionBreak,
  50. BreakpointActionSkip,
  51. BreakpointActionLimit,
  52. BreakpointActionContinue
  53. };
  54. //==============================================================================================================
  55. interface IRowMatcher : extends IXmlWriter
  56. {
  57. virtual void reset() = 0;
  58. virtual bool matched() const = 0;
  59. virtual const char *queryFieldName() const = 0;
  60. virtual const char *queryValue() const = 0;
  61. virtual bool queryCaseSensitive() const = 0;
  62. virtual bool canMatchAny(IOutputMetaData *meta) = 0;
  63. virtual void serialize(MemoryBuffer &out) const = 0;
  64. };
  65. interface IHistoryRow
  66. {
  67. virtual const void *queryRow() const = 0;
  68. virtual unsigned querySequence() const = 0;
  69. virtual unsigned queryRowCount() const = 0;
  70. virtual bool wasSkipped() const = 0;
  71. virtual bool wasLimited() const = 0;
  72. virtual bool wasEof() const = 0;
  73. virtual bool wasEog() const = 0;
  74. virtual void setSkipped() = 0;
  75. virtual void setLimited() = 0;
  76. virtual void setEof() = 0;
  77. virtual void setEog() = 0;
  78. };
  79. interface IGlobalEdgeRecord : extends IInterface
  80. {
  81. virtual unsigned queryCount() const = 0;
  82. virtual void incrementCount(int inc, unsigned sequence) = 0;
  83. virtual unsigned queryLastSequence() = 0;
  84. virtual void reset() = 0;
  85. };
  86. //==============================================================================================================
  87. class DebugActivityRecord;
  88. typedef MapXToMyClass<IActivityBase *, IActivityBase *, DebugActivityRecord> DebugActivityMap;
  89. interface IBreakpointInfo;
  90. interface IActivityDebugContext : extends IInterface
  91. {
  92. virtual unsigned queryLastSequence() const = 0;
  93. virtual IActivityDebugContext *queryInputActivity() const = 0;
  94. virtual void getXGMML(IXmlWriter *output) const = 0;
  95. virtual unsigned queryHistorySize() const = 0;
  96. virtual IHistoryRow *queryHistoryRow(unsigned idx) const = 0;
  97. virtual unsigned queryHistoryCapacity() const = 0;
  98. virtual IBreakpointInfo *debuggerCallback(unsigned sequence, const void *row) = 0; // NOTE - we only add to history when called back to do so, to ensure consistent timing.
  99. virtual void setHistoryCapacity(unsigned newCapacity) = 0;
  100. virtual void clearHistory() = 0;
  101. virtual void searchHistories(IXmlWriter *output, IRowMatcher *matcher, bool fullRows) = 0;
  102. virtual void printEdge(IXmlWriter *output, unsigned startRow, unsigned numRows) const = 0;
  103. virtual void setBreakpoint(IBreakpointInfo &bp) = 0;
  104. virtual void removeBreakpoint(IBreakpointInfo &bp) = 0;
  105. virtual const char *queryEdgeId() const = 0;
  106. virtual const char *querySourceId() const = 0;
  107. virtual memsize_t queryProxyId() const = 0;
  108. };
  109. //==============================================================================================================
  110. interface IDebuggableContext;
  111. interface IDebugGraphManager : extends IInterface
  112. {
  113. virtual IActivityDebugContext *lookupActivityByEdgeId(const char *edgeId) = 0;
  114. virtual const char *queryGraphName() const = 0;
  115. virtual void getXGMML(IXmlWriter *output, unsigned sequence, bool isActive) = 0;
  116. virtual IDebuggableContext *queryContext() const= 0;
  117. virtual void setBreakpoint(IBreakpointInfo &bp) = 0;
  118. virtual void removeBreakpoint(IBreakpointInfo &bp) = 0;
  119. virtual void setHistoryCapacity(unsigned newCapacity) = 0;
  120. virtual void searchHistories(IXmlWriter *output, IRowMatcher *matcher, bool fullRows) = 0;
  121. virtual void clearHistories() = 0;
  122. virtual memsize_t queryProxyId() const = 0;
  123. virtual unsigned queryId() const = 0;
  124. virtual const char *queryIdString() const = 0;
  125. virtual void outputChildGraph(IXmlWriter *output, unsigned sequence) = 0;
  126. virtual void outputLinksForChildGraph(IXmlWriter *output, const char *parentId) = 0;
  127. virtual void serializeProxyGraphs(MemoryBuffer &buff) = 0;
  128. virtual void deserializeProxyGraphs(DebugState state, MemoryBuffer &buff, IActivityBase *parentActivity, unsigned channel) = 0;
  129. virtual void mergeRemoteCounts(IDebuggableContext *into) const = 0;
  130. virtual void setNodeProperty(IActivityBase *node, const char *propName, const char *propValue) = 0;
  131. virtual DebugActivityRecord *getNodeByActivityBase(IActivityBase *activity) const = 0;
  132. };
  133. //==============================================================================================================
  134. interface IRoxieProbe : public IInterface
  135. {
  136. virtual IInputBase &queryInput() = 0;
  137. };
  138. interface IProbeManager : public IInterface
  139. {
  140. virtual IRoxieProbe *createProbe(IInputBase *in, IActivityBase *inAct, IActivityBase *outAct, unsigned sourceIdx, unsigned targetIdx, unsigned iteration) = 0;
  141. virtual void getProbeResponse(IPropertyTree *query) = 0;
  142. virtual void noteSink(IActivityBase *sink) = 0;
  143. virtual void noteDependency(IActivityBase *sourceActivity, unsigned sourceIndex, unsigned controlId, const char *edgeId, IActivityBase *targetActivity) = 0;
  144. virtual IProbeManager *startChildGraph(unsigned id, IActivityBase *parent) = 0;
  145. virtual void endChildGraph(IProbeManager *child, IActivityBase *parent) = 0;
  146. virtual void deleteGraph(IArrayOf<IActivityBase> *activities, IArrayOf<IInputBase> *probes) = 0;
  147. virtual IDebugGraphManager *queryDebugManager() = 0;
  148. virtual void setNodeProperty(IActivityBase *node, const char *propName, const char *propValue) = 0;
  149. virtual void setNodePropertyInt(IActivityBase *node, const char *propName, unsigned __int64 propValue) = 0;
  150. };
  151. //==============================================================================================================
  152. interface IDebuggerContext : extends IInterface
  153. {
  154. // called by debugger
  155. virtual void debugContinue(IXmlWriter *output, const char *modeString, const char *id) = 0;
  156. virtual void addBreakpoint(IXmlWriter *output, const char *modeString, const char *id, const char *action,
  157. const char *fieldName, const char *condition, const char *value, bool caseSensitive,
  158. unsigned hitCount, const char *hitCountMode) = 0;
  159. virtual void removeBreakpoint(IXmlWriter *output, unsigned removeIdx) = 0;
  160. virtual void removeAllBreakpoints(IXmlWriter *output) = 0;
  161. virtual void listBreakpoint(IXmlWriter *output, unsigned idx) const = 0;
  162. virtual void listAllBreakpoints(IXmlWriter *output) const = 0;
  163. virtual void debugInterrupt(IXmlWriter *output) = 0;
  164. virtual void debugNext(IXmlWriter *output) = 0;
  165. virtual void debugOver(IXmlWriter *output) = 0;
  166. virtual void debugQuit(IXmlWriter *output) = 0;
  167. virtual void debugRun(IXmlWriter *output) = 0;
  168. virtual void debugSearch(IXmlWriter *output, const char *fieldName, const char *condition, const char *value, bool caseSensitive, bool fullRows) const = 0;
  169. virtual void debugSkip(IXmlWriter *output) = 0;
  170. virtual void debugStatus(IXmlWriter *output) const = 0;
  171. virtual void debugStep(IXmlWriter *output, const char *modeString) = 0;
  172. virtual void debugPrintVariable(IXmlWriter *output, const char *name, const char *type) const = 0;
  173. // restart? set params?
  174. virtual void debugChanges(IXmlWriter *output, unsigned sequence) const = 0;
  175. virtual void debugCounts(IXmlWriter *output, unsigned sequence, bool reset) = 0;
  176. virtual void debugGetConfig(IXmlWriter *output, const char *name, const char *id) const = 0;
  177. virtual void debugSetConfig(IXmlWriter *output, const char *name, const char *value, const char *id) = 0;
  178. virtual void debugWhere(IXmlWriter *output) const = 0;
  179. virtual void debugPrint(IXmlWriter *output, const char *edgeId, unsigned startRow, unsigned numRows) const = 0;
  180. virtual void getCurrentGraphXGMML(IXmlWriter *output, bool original) const = 0;
  181. virtual void getQueryXGMML(IXmlWriter *output) const = 0;
  182. virtual void getGraphXGMML(IXmlWriter *output, const char *graphName) const = 0;
  183. virtual const char *queryQueryName() const = 0;
  184. virtual const char *queryDebugId() const = 0;
  185. };
  186. //==============================================================================================================
  187. class RoxiePacketHeader;
  188. interface IRoxieQueryPacket;
  189. interface IDebuggableContext : public IInterface
  190. {
  191. // Called by program being debugged
  192. virtual void debugInitialize(const char *id, const char *queryName, bool breakAtStart) = 0;
  193. virtual void debugTerminate() = 0;
  194. virtual BreakpointActionMode checkBreakpoint(DebugState programState, IActivityDebugContext *probe, const void *extra) = 0; // true means skip current row
  195. virtual void noteManager(IDebugGraphManager *mgr) = 0; // NOTE - don't link it!
  196. virtual void releaseManager(IDebugGraphManager *mgr) = 0;
  197. virtual unsigned querySequence() = 0;
  198. virtual void checkDelayedBreakpoints(IActivityDebugContext *newProbe) = 0;
  199. virtual unsigned getDefaultHistoryCapacity() const = 0;
  200. virtual bool getExecuteSequentially() const = 0;
  201. virtual unsigned queryChannel() const = 0;
  202. virtual IRoxieQueryPacket *onDebugCallback(const RoxiePacketHeader &header, size32_t len, char *data) = 0;
  203. virtual void serialize(MemoryBuffer &buff) const = 0;
  204. virtual void noteGraphChanged() = 0;
  205. virtual void addBreakpoint(IBreakpointInfo &bp) = 0;
  206. virtual void removeBreakpoint(IBreakpointInfo &bp) = 0;
  207. virtual IGlobalEdgeRecord *getEdgeRecord(const char *edgeId) = 0;
  208. virtual void debugCounts(IXmlWriter *output, unsigned sequence, bool reset) = 0;
  209. };
  210. //=======================================================================================
  211. #endif // ROXIEDEBUG_IPP