19258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org// Copyright 2008 the V8 project authors. All rights reserved. 23484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org// Use of this source code is governed by a BSD-style license that can be 33484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org// found in the LICENSE file. 443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 55ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org#ifndef V8_V8_DEBUG_H_ 65ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org#define V8_V8_DEBUG_H_ 743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "v8.h" 943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 1143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Debugger support for the V8 JavaScript engine. 1243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 1343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansennamespace v8 { 1443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 157276f14ca716596e0a0d17539516370c1f453847kasper.lund// Debug events which can occur in the V8 JavaScript engine. 1643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenenum DebugEvent { 1743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Break = 1, 1843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Exception = 2, 1943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen NewFunction = 3, 2043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen BeforeCompile = 4, 2171affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.org AfterCompile = 5, 2222762870ddc5995ca60f432799b94a6abd7680cemikhail.naganov@gmail.com ScriptCollected = 6, 23a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.org BreakForCommand = 7 2443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 2543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 2643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 27594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Debug { 2843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 2965dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org /** 3065dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org * A client object passed to the v8 debugger whose ownership will be taken by 3165dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org * it. v8 is always responsible for deleting the object. 3265dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org */ 3365dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org class ClientData { 3465dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org public: 3565dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org virtual ~ClientData() {} 3665dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org }; 3765dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org 3865dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org 3965dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org /** 405ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org * A message object passed to the debug message handler. 415ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org */ 425ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org class Message { 435ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org public: 445ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org /** 455ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org * Check type of message. 465ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org */ 475ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org virtual bool IsEvent() const = 0; 485ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org virtual bool IsResponse() const = 0; 495ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org virtual DebugEvent GetEvent() const = 0; 505ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org 515ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org /** 525ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org * Indicate whether this is a response to a continue command which will 535ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org * start the VM running after this is processed. 545ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org */ 555ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org virtual bool WillStartRunning() const = 0; 565ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org 575ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org /** 585ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org * Access to execution state and event data. Don't store these cross 595ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org * callbacks as their content becomes invalid. These objects are from the 605ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org * debugger event that started the debug message loop. 615ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org */ 625ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org virtual Handle<Object> GetExecutionState() const = 0; 635ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org virtual Handle<Object> GetEventData() const = 0; 645ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org 655ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org /** 665ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org * Get the debugger protocol JSON. 675ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org */ 685ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org virtual Handle<String> GetJSON() const = 0; 695ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org 705ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org /** 715ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org * Get the context active when the debug event happened. Note this is not 725ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org * the current active context as the JavaScript part of the debugger is 737304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org * running in its own context which is entered at this point. 745ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org */ 755ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org virtual Handle<Context> GetEventContext() const = 0; 765ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org 775ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org /** 785ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org * Client data passed with the corresponding request if any. This is the 795ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org * client_data data value passed into Debug::SendCommand along with the 805ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org * request that led to the message or NULL if the message is an event. The 815ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org * debugger takes ownership of the data and will delete it even if there is 825ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org * no message handler. 835ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org */ 845ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org virtual ClientData* GetClientData() const = 0; 855ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org 86c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org virtual Isolate* GetIsolate() const = 0; 87c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org 885ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org virtual ~Message() {} 895ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org }; 90f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.org 915ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org 925ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org /** 939dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com * An event details object passed to the debug event listener. 949dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com */ 959dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com class EventDetails { 969dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com public: 979dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com /** 989dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com * Event type. 999dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com */ 1009dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com virtual DebugEvent GetEvent() const = 0; 1019dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com 1029dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com /** 1039dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com * Access to execution state and event data of the debug event. Don't store 1049dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com * these cross callbacks as their content becomes invalid. 1059dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com */ 1069dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com virtual Handle<Object> GetExecutionState() const = 0; 1079dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com virtual Handle<Object> GetEventData() const = 0; 1089dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com 1099dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com /** 1109dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com * Get the context active when the debug event happened. Note this is not 1119dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com * the current active context as the JavaScript part of the debugger is 1127304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org * running in its own context which is entered at this point. 1139dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com */ 1149dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com virtual Handle<Context> GetEventContext() const = 0; 1159dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com 1169dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com /** 1177304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org * Client data passed with the corresponding callback when it was 1187304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org * registered. 1199dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com */ 1209dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com virtual Handle<Value> GetCallbackData() const = 0; 1219dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com 12222762870ddc5995ca60f432799b94a6abd7680cemikhail.naganov@gmail.com /** 12322762870ddc5995ca60f432799b94a6abd7680cemikhail.naganov@gmail.com * Client data passed to DebugBreakForCommand function. The 12422762870ddc5995ca60f432799b94a6abd7680cemikhail.naganov@gmail.com * debugger takes ownership of the data and will delete it even if 12522762870ddc5995ca60f432799b94a6abd7680cemikhail.naganov@gmail.com * there is no message handler. 12622762870ddc5995ca60f432799b94a6abd7680cemikhail.naganov@gmail.com */ 12722762870ddc5995ca60f432799b94a6abd7680cemikhail.naganov@gmail.com virtual ClientData* GetClientData() const = 0; 12822762870ddc5995ca60f432799b94a6abd7680cemikhail.naganov@gmail.com 1299dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com virtual ~EventDetails() {} 1309dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com }; 1319dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com 1329dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com /** 1339dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com * Debug event callback function. 1349dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com * 1359dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com * \param event_details object providing information about the debug event 1369dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com * 1379dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com * A EventCallback2 does not take possession of the event data, 1389dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com * and must not rely on the data persisting after the handler returns. 1399dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com */ 140aa107b240dc43417fae8469b5c1b0f1ec9f98400machenbach@chromium.org typedef void (*EventCallback)(const EventDetails& event_details); 141aa107b240dc43417fae8469b5c1b0f1ec9f98400machenbach@chromium.org 14265dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org /** 14365dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org * Debug message callback function. 14465dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org * 1455ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org * \param message the debug message handler message object 146ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * 147662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org * A MessageHandler2 does not take possession of the message data, 1485ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org * and must not rely on the data persisting after the handler returns. 1495ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org */ 150aa107b240dc43417fae8469b5c1b0f1ec9f98400machenbach@chromium.org typedef void (*MessageHandler)(const Message& message); 151aa107b240dc43417fae8469b5c1b0f1ec9f98400machenbach@chromium.org 15265dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org /** 153c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.org * Callback function for the host to ensure debug messages are processed. 154c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.org */ 155c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.org typedef void (*DebugMessageDispatchHandler)(); 156c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.org 157aa107b240dc43417fae8469b5c1b0f1ec9f98400machenbach@chromium.org static bool SetDebugEventListener(EventCallback that, 158aa107b240dc43417fae8469b5c1b0f1ec9f98400machenbach@chromium.org Handle<Value> data = Handle<Value>()); 159aa107b240dc43417fae8469b5c1b0f1ec9f98400machenbach@chromium.org 160ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org // Schedule a debugger break to happen when JavaScript code is run 161e9fd6580f52407c94d77bfcb4be04207f2ebb2f1machenbach@chromium.org // in the given isolate. 162e9fd6580f52407c94d77bfcb4be04207f2ebb2f1machenbach@chromium.org static void DebugBreak(Isolate* isolate); 16343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 164ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org // Remove scheduled debugger break in given isolate if it has not 165e9fd6580f52407c94d77bfcb4be04207f2ebb2f1machenbach@chromium.org // happened yet. 166e9fd6580f52407c94d77bfcb4be04207f2ebb2f1machenbach@chromium.org static void CancelDebugBreak(Isolate* isolate); 167f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org 168ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org // Break execution of JavaScript in the given isolate (this method 169ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org // can be invoked from a non-VM thread) for further client command 170ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org // execution on a VM thread. Client data is then passed in 171662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org // EventDetails to EventCallback2 at the moment when the VM actually 172e9fd6580f52407c94d77bfcb4be04207f2ebb2f1machenbach@chromium.org // stops. 173e9fd6580f52407c94d77bfcb4be04207f2ebb2f1machenbach@chromium.org static void DebugBreakForCommand(Isolate* isolate, ClientData* data); 174e9fd6580f52407c94d77bfcb4be04207f2ebb2f1machenbach@chromium.org 175662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org // Message based interface. The message protocol is JSON. 176aa107b240dc43417fae8469b5c1b0f1ec9f98400machenbach@chromium.org static void SetMessageHandler(MessageHandler handler); 177aa107b240dc43417fae8469b5c1b0f1ec9f98400machenbach@chromium.org 178528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org static void SendCommand(Isolate* isolate, 179528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org const uint16_t* command, int length, 180528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org ClientData* client_data = NULL); 181a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 182a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org /** 183a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org * Run a JavaScript function in the debugger. 184a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org * \param fun the function to call 185a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org * \param data passed as second argument to the function 186a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org * With this call the debugger is entered and the function specified is called 187a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org * with the execution state as the first argument. This makes it possible to 188a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org * get access to information otherwise not available during normal JavaScript 189df7a284a293865a5fa9390be2e8f82ba3ac8598asgjesse@chromium.org * execution e.g. details on stack frames. Receiver of the function call will 190df7a284a293865a5fa9390be2e8f82ba3ac8598asgjesse@chromium.org * be the debugger context global object, however this is a subject to change. 1917304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org * The following example shows a JavaScript function which when passed to 192df7a284a293865a5fa9390be2e8f82ba3ac8598asgjesse@chromium.org * v8::Debug::Call will return the current line of JavaScript execution. 193a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org * 194a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org * \code 195a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org * function frame_source_line(exec_state) { 196a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org * return exec_state.frame(0).sourceLine(); 197a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org * } 198a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org * \endcode 199a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org */ 200911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org static Local<Value> Call(v8::Handle<v8::Function> fun, 201de88679a78f9dae12fdf7955610969ac4c79b0bemstarzinger@chromium.org Handle<Value> data = Handle<Value>()); 2027be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org 203911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org /** 204911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org * Returns a mirror object for the given object. 205911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org */ 206911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org static Local<Value> GetMirror(v8::Handle<v8::Value> obj); 207911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org 208c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com /** 209b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * Makes V8 process all pending debug messages. 210b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * 211b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * From V8 point of view all debug messages come asynchronously (e.g. from 212b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * remote debugger) but they all must be handled synchronously: V8 cannot 213b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * do 2 things at one time so normal script execution must be interrupted 214b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * for a while. 215b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * 216b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * Generally when message arrives V8 may be in one of 3 states: 217b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * 1. V8 is running script; V8 will automatically interrupt and process all 218ed1a63112185152bc10fbd02418393804a5fcf04machenbach@chromium.org * pending messages; 219b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * 2. V8 is suspended on debug breakpoint; in this state V8 is dedicated 220b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * to reading and processing debug messages; 221b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * 3. V8 is not running at all or has called some long-working C++ function; 2227304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org * by default it means that processing of all debug messages will be deferred 223b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * until V8 gets control again; however, embedding application may improve 224b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * this by manually calling this method. 225b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * 226b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * Technically this method in many senses is equivalent to executing empty 227b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * script: 228b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * 1. It does nothing except for processing all pending debug messages. 229b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * 2. It should be invoked with the same precautions and from the same context 230b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * as V8 script would be invoked from, because: 231b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * a. with "evaluate" command it can do whatever normal script can do, 232b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * including all native calls; 233b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * b. no other thread should call V8 while this method is running 234b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * (v8::Locker may be used here). 235b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * 236b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * "Evaluate" debug command behavior currently is not specified in scope 237b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * of this method. 238b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org */ 239b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org static void ProcessDebugMessages(); 240df7a284a293865a5fa9390be2e8f82ba3ac8598asgjesse@chromium.org 241df7a284a293865a5fa9390be2e8f82ba3ac8598asgjesse@chromium.org /** 2427304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org * Debugger is running in its own context which is entered while debugger 243df7a284a293865a5fa9390be2e8f82ba3ac8598asgjesse@chromium.org * messages are being dispatched. This is an explicit getter for this 244df7a284a293865a5fa9390be2e8f82ba3ac8598asgjesse@chromium.org * debugger context. Note that the content of the debugger context is subject 245df7a284a293865a5fa9390be2e8f82ba3ac8598asgjesse@chromium.org * to change. 246df7a284a293865a5fa9390be2e8f82ba3ac8598asgjesse@chromium.org */ 247df7a284a293865a5fa9390be2e8f82ba3ac8598asgjesse@chromium.org static Local<Context> GetDebugContext(); 248de88679a78f9dae12fdf7955610969ac4c79b0bemstarzinger@chromium.org 249de88679a78f9dae12fdf7955610969ac4c79b0bemstarzinger@chromium.org 250de88679a78f9dae12fdf7955610969ac4c79b0bemstarzinger@chromium.org /** 251de88679a78f9dae12fdf7955610969ac4c79b0bemstarzinger@chromium.org * Enable/disable LiveEdit functionality for the given Isolate 252de88679a78f9dae12fdf7955610969ac4c79b0bemstarzinger@chromium.org * (default Isolate if not provided). V8 will abort if LiveEdit is 253de88679a78f9dae12fdf7955610969ac4c79b0bemstarzinger@chromium.org * unexpectedly used. LiveEdit is enabled by default. 254de88679a78f9dae12fdf7955610969ac4c79b0bemstarzinger@chromium.org */ 255e9fd6580f52407c94d77bfcb4be04207f2ebb2f1machenbach@chromium.org static void SetLiveEditEnabled(Isolate* isolate, bool enable); 25643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 25743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 25843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 25943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} // namespace v8 26043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 26143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 26243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#undef EXPORT 26343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 26443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 2655ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org#endif // V8_V8_DEBUG_H_ 266