Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(403)

Side by Side Diff: include/v8-debug.h

Issue 2642253005: [debugger api] remove legacy JSON debug protocol. (Closed)
Patch Set: Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | src/api.cc » ('j') | src/debug/debug.cc » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2008 the V8 project authors. All rights reserved. 1 // Copyright 2008 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef V8_V8_DEBUG_H_ 5 #ifndef V8_V8_DEBUG_H_
6 #define V8_V8_DEBUG_H_ 6 #define V8_V8_DEBUG_H_
7 7
8 #include "v8.h" // NOLINT(build/include) 8 #include "v8.h" // NOLINT(build/include)
9 9
10 /** 10 /**
11 * Debugger support for the V8 JavaScript engine. 11 * Debugger support for the V8 JavaScript engine.
12 */ 12 */
13 namespace v8 { 13 namespace v8 {
14 14
15 // Debug events which can occur in the V8 JavaScript engine. 15 // Debug events which can occur in the V8 JavaScript engine.
16 enum DebugEvent { 16 enum DebugEvent {
17 Break = 1, 17 Break = 1,
18 Exception = 2, 18 Exception = 2,
19 AfterCompile = 3, 19 AfterCompile = 3,
20 CompileError = 4, 20 CompileError = 4,
21 AsyncTaskEvent = 5, 21 AsyncTaskEvent = 5,
22 }; 22 };
23 23
24 class V8_EXPORT Debug { 24 class V8_EXPORT Debug {
25 public: 25 public:
26 /** 26 /**
27 * A client object passed to the v8 debugger whose ownership will be taken by
28 * it. v8 is always responsible for deleting the object.
29 */
30 class ClientData {
31 public:
32 virtual ~ClientData() {}
33 };
34
35
36 /**
37 * A message object passed to the debug message handler.
38 */
39 class Message {
40 public:
41 /**
42 * Check type of message.
43 */
44 virtual bool IsEvent() const = 0;
45 virtual bool IsResponse() const = 0;
46 virtual DebugEvent GetEvent() const = 0;
47
48 /**
49 * Indicate whether this is a response to a continue command which will
50 * start the VM running after this is processed.
51 */
52 virtual bool WillStartRunning() const = 0;
53
54 /**
55 * Access to execution state and event data. Don't store these cross
56 * callbacks as their content becomes invalid. These objects are from the
57 * debugger event that started the debug message loop.
58 */
59 virtual Local<Object> GetExecutionState() const = 0;
60 virtual Local<Object> GetEventData() const = 0;
61
62 /**
63 * Get the debugger protocol JSON.
64 */
65 virtual Local<String> GetJSON() const = 0;
66
67 /**
68 * Get the context active when the debug event happened. Note this is not
69 * the current active context as the JavaScript part of the debugger is
70 * running in its own context which is entered at this point.
71 */
72 virtual Local<Context> GetEventContext() const = 0;
73
74 /**
75 * Client data passed with the corresponding request if any. This is the
76 * client_data data value passed into Debug::SendCommand along with the
77 * request that led to the message or NULL if the message is an event. The
78 * debugger takes ownership of the data and will delete it even if there is
79 * no message handler.
80 */
81 virtual ClientData* GetClientData() const = 0;
82
83 virtual Isolate* GetIsolate() const = 0;
84
85 virtual ~Message() {}
86 };
87
88 /**
89 * An event details object passed to the debug event listener. 27 * An event details object passed to the debug event listener.
90 */ 28 */
91 class EventDetails { 29 class EventDetails {
92 public: 30 public:
93 /** 31 /**
94 * Event type. 32 * Event type.
95 */ 33 */
96 virtual DebugEvent GetEvent() const = 0; 34 virtual DebugEvent GetEvent() const = 0;
97 35
98 /** 36 /**
99 * Access to execution state and event data of the debug event. Don't store 37 * Access to execution state and event data of the debug event. Don't store
100 * these cross callbacks as their content becomes invalid. 38 * these cross callbacks as their content becomes invalid.
101 */ 39 */
102 virtual Local<Object> GetExecutionState() const = 0; 40 virtual Local<Object> GetExecutionState() const = 0;
103 virtual Local<Object> GetEventData() const = 0; 41 virtual Local<Object> GetEventData() const = 0;
104 42
105 /** 43 /**
106 * Get the context active when the debug event happened. Note this is not 44 * Get the context active when the debug event happened. Note this is not
107 * the current active context as the JavaScript part of the debugger is 45 * the current active context as the JavaScript part of the debugger is
108 * running in its own context which is entered at this point. 46 * running in its own context which is entered at this point.
109 */ 47 */
110 virtual Local<Context> GetEventContext() const = 0; 48 virtual Local<Context> GetEventContext() const = 0;
111 49
112 /** 50 /**
113 * Client data passed with the corresponding callback when it was 51 * Client data passed with the corresponding callback when it was
114 * registered. 52 * registered.
115 */ 53 */
116 virtual Local<Value> GetCallbackData() const = 0; 54 virtual Local<Value> GetCallbackData() const = 0;
117 55
118 /**
119 * Client data passed to DebugBreakForCommand function. The
120 * debugger takes ownership of the data and will delete it even if
121 * there is no message handler.
122 */
123 virtual ClientData* GetClientData() const = 0;
124
125 virtual Isolate* GetIsolate() const = 0; 56 virtual Isolate* GetIsolate() const = 0;
126 57
127 virtual ~EventDetails() {} 58 virtual ~EventDetails() {}
128 }; 59 };
129 60
130 /** 61 /**
131 * Debug event callback function. 62 * Debug event callback function.
132 * 63 *
133 * \param event_details object providing information about the debug event 64 * \param event_details object providing information about the debug event
134 * 65 *
135 * A EventCallback2 does not take possession of the event data, 66 * A EventCallback does not take possession of the event data,
136 * and must not rely on the data persisting after the handler returns. 67 * and must not rely on the data persisting after the handler returns.
137 */ 68 */
138 typedef void (*EventCallback)(const EventDetails& event_details); 69 typedef void (*EventCallback)(const EventDetails& event_details);
139 70
140 /**
141 * Debug message callback function.
142 *
143 * \param message the debug message handler message object
144 *
145 * A MessageHandler does not take possession of the message data,
146 * and must not rely on the data persisting after the handler returns.
147 */
148 typedef void (*MessageHandler)(const Message& message);
149
150 /**
151 * Callback function for the host to ensure debug messages are processed.
152 */
153 typedef void (*DebugMessageDispatchHandler)();
154
155 static bool SetDebugEventListener(Isolate* isolate, EventCallback that, 71 static bool SetDebugEventListener(Isolate* isolate, EventCallback that,
156 Local<Value> data = Local<Value>()); 72 Local<Value> data = Local<Value>());
157 73
158 // Schedule a debugger break to happen when JavaScript code is run 74 // Schedule a debugger break to happen when JavaScript code is run
159 // in the given isolate. 75 // in the given isolate.
160 static void DebugBreak(Isolate* isolate); 76 static void DebugBreak(Isolate* isolate);
161 77
162 // Remove scheduled debugger break in given isolate if it has not 78 // Remove scheduled debugger break in given isolate if it has not
163 // happened yet. 79 // happened yet.
164 static void CancelDebugBreak(Isolate* isolate); 80 static void CancelDebugBreak(Isolate* isolate);
165 81
166 // Check if a debugger break is scheduled in the given isolate. 82 // Check if a debugger break is scheduled in the given isolate.
167 V8_DEPRECATED("No longer supported", 83 V8_DEPRECATED("No longer supported",
168 static bool CheckDebugBreak(Isolate* isolate)); 84 static bool CheckDebugBreak(Isolate* isolate));
169 85
170 // Message based interface. The message protocol is JSON.
171 V8_DEPRECATED("No longer supported",
172 static void SetMessageHandler(Isolate* isolate,
173 MessageHandler handler));
174
175 V8_DEPRECATED("No longer supported",
176 static void SendCommand(Isolate* isolate,
177 const uint16_t* command, int length,
178 ClientData* client_data = NULL));
179
180 /** 86 /**
181 * Run a JavaScript function in the debugger. 87 * Run a JavaScript function in the debugger.
182 * \param fun the function to call 88 * \param fun the function to call
183 * \param data passed as second argument to the function 89 * \param data passed as second argument to the function
184 * With this call the debugger is entered and the function specified is called 90 * With this call the debugger is entered and the function specified is called
185 * with the execution state as the first argument. This makes it possible to 91 * with the execution state as the first argument. This makes it possible to
186 * get access to information otherwise not available during normal JavaScript 92 * get access to information otherwise not available during normal JavaScript
187 * execution e.g. details on stack frames. Receiver of the function call will 93 * execution e.g. details on stack frames. Receiver of the function call will
188 * be the debugger context global object, however this is a subject to change. 94 * be the debugger context global object, however this is a subject to change.
189 * The following example shows a JavaScript function which when passed to 95 * The following example shows a JavaScript function which when passed to
(...skipping 11 matching lines...) Expand all
201 Local<Value> data = Local<Value>()); 107 Local<Value> data = Local<Value>());
202 108
203 /** 109 /**
204 * Returns a mirror object for the given object. 110 * Returns a mirror object for the given object.
205 */ 111 */
206 V8_DEPRECATED("No longer supported", 112 V8_DEPRECATED("No longer supported",
207 static MaybeLocal<Value> GetMirror(Local<Context> context, 113 static MaybeLocal<Value> GetMirror(Local<Context> context,
208 v8::Local<v8::Value> obj)); 114 v8::Local<v8::Value> obj));
209 115
210 /** 116 /**
211 * Makes V8 process all pending debug messages.
212 *
213 * From V8 point of view all debug messages come asynchronously (e.g. from
214 * remote debugger) but they all must be handled synchronously: V8 cannot
215 * do 2 things at one time so normal script execution must be interrupted
216 * for a while.
217 *
218 * Generally when message arrives V8 may be in one of 3 states:
219 * 1. V8 is running script; V8 will automatically interrupt and process all
220 * pending messages;
221 * 2. V8 is suspended on debug breakpoint; in this state V8 is dedicated
222 * to reading and processing debug messages;
223 * 3. V8 is not running at all or has called some long-working C++ function;
224 * by default it means that processing of all debug messages will be deferred
225 * until V8 gets control again; however, embedding application may improve
226 * this by manually calling this method.
227 *
228 * Technically this method in many senses is equivalent to executing empty
229 * script:
230 * 1. It does nothing except for processing all pending debug messages.
231 * 2. It should be invoked with the same precautions and from the same context
232 * as V8 script would be invoked from, because:
233 * a. with "evaluate" command it can do whatever normal script can do,
234 * including all native calls;
235 * b. no other thread should call V8 while this method is running
236 * (v8::Locker may be used here).
237 *
238 * "Evaluate" debug command behavior currently is not specified in scope
239 * of this method.
240 */
241 V8_DEPRECATED("No longer supported",
242 static void ProcessDebugMessages(Isolate* isolate));
243
244 /**
245 * Debugger is running in its own context which is entered while debugger 117 * Debugger is running in its own context which is entered while debugger
246 * messages are being dispatched. This is an explicit getter for this 118 * messages are being dispatched. This is an explicit getter for this
247 * debugger context. Note that the content of the debugger context is subject 119 * debugger context. Note that the content of the debugger context is subject
248 * to change. The Context exists only when the debugger is active, i.e. at 120 * to change. The Context exists only when the debugger is active, i.e. at
249 * least one DebugEventListener or MessageHandler is set. 121 * least one DebugEventListener or MessageHandler is set.
250 */ 122 */
251 V8_DEPRECATED("Use v8-inspector", 123 V8_DEPRECATED("Use v8-inspector",
252 static Local<Context> GetDebugContext(Isolate* isolate)); 124 static Local<Context> GetDebugContext(Isolate* isolate));
253 125
254 /** 126 /**
(...skipping 29 matching lines...) Expand all
284 }; 156 };
285 157
286 158
287 } // namespace v8 159 } // namespace v8
288 160
289 161
290 #undef EXPORT 162 #undef EXPORT
291 163
292 164
293 #endif // V8_V8_DEBUG_H_ 165 #endif // V8_V8_DEBUG_H_
OLDNEW
« no previous file with comments | « no previous file | src/api.cc » ('j') | src/debug/debug.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698