19258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org// Copyright 2008 the V8 project authors. All rights reserved. 243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Redistribution and use in source and binary forms, with or without 343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// modification, are permitted provided that the following conditions are 443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// met: 543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// 643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// * Redistributions of source code must retain the above copyright 743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// notice, this list of conditions and the following disclaimer. 843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// * Redistributions in binary form must reproduce the above 943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// copyright notice, this list of conditions and the following 1043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// disclaimer in the documentation and/or other materials provided 1143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// with the distribution. 1243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// * Neither the name of Google Inc. nor the names of its 1343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// contributors may be used to endorse or promote products derived 1443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// from this software without specific prior written permission. 1543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// 1643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 1943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 285ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org#ifndef V8_V8_DEBUG_H_ 295ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org#define V8_V8_DEBUG_H_ 3043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "v8.h" 3243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 3443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Debugger support for the V8 JavaScript engine. 3543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 3643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansennamespace v8 { 3743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 387276f14ca716596e0a0d17539516370c1f453847kasper.lund// Debug events which can occur in the V8 JavaScript engine. 3943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenenum DebugEvent { 4043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Break = 1, 4143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Exception = 2, 4243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen NewFunction = 3, 4343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen BeforeCompile = 4, 4471affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.org AfterCompile = 5, 4522762870ddc5995ca60f432799b94a6abd7680cemikhail.naganov@gmail.com ScriptCollected = 6, 4622762870ddc5995ca60f432799b94a6abd7680cemikhail.naganov@gmail.com BreakForCommand = 7 4743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 4843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 4943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 50594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgclass V8_EXPORT Debug { 5143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 5265dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org /** 5365dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org * A client object passed to the v8 debugger whose ownership will be taken by 5465dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org * it. v8 is always responsible for deleting the object. 5565dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org */ 5665dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org class ClientData { 5765dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org public: 5865dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org virtual ~ClientData() {} 5965dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org }; 6065dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org 6165dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org 6265dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org /** 635ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org * A message object passed to the debug message handler. 645ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org */ 655ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org class Message { 665ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org public: 675ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org /** 685ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org * Check type of message. 695ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org */ 705ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org virtual bool IsEvent() const = 0; 715ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org virtual bool IsResponse() const = 0; 725ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org virtual DebugEvent GetEvent() const = 0; 735ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org 745ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org /** 755ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org * Indicate whether this is a response to a continue command which will 765ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org * start the VM running after this is processed. 775ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org */ 785ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org virtual bool WillStartRunning() const = 0; 795ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org 805ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org /** 815ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org * Access to execution state and event data. Don't store these cross 825ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org * callbacks as their content becomes invalid. These objects are from the 835ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org * debugger event that started the debug message loop. 845ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org */ 855ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org virtual Handle<Object> GetExecutionState() const = 0; 865ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org virtual Handle<Object> GetEventData() const = 0; 875ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org 885ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org /** 895ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org * Get the debugger protocol JSON. 905ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org */ 915ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org virtual Handle<String> GetJSON() const = 0; 925ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org 935ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org /** 945ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org * Get the context active when the debug event happened. Note this is not 955ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org * the current active context as the JavaScript part of the debugger is 967304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org * running in its own context which is entered at this point. 975ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org */ 985ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org virtual Handle<Context> GetEventContext() const = 0; 995ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org 1005ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org /** 1015ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org * Client data passed with the corresponding request if any. This is the 1025ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org * client_data data value passed into Debug::SendCommand along with the 1035ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org * request that led to the message or NULL if the message is an event. The 1045ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org * debugger takes ownership of the data and will delete it even if there is 1055ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org * no message handler. 1065ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org */ 1075ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org virtual ClientData* GetClientData() const = 0; 1085ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org 1095ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org virtual ~Message() {} 1105ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org }; 111f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.org 1125ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org 1135ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org /** 1149dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com * An event details object passed to the debug event listener. 1159dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com */ 1169dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com class EventDetails { 1179dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com public: 1189dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com /** 1199dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com * Event type. 1209dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com */ 1219dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com virtual DebugEvent GetEvent() const = 0; 1229dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com 1239dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com /** 1249dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com * Access to execution state and event data of the debug event. Don't store 1259dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com * these cross callbacks as their content becomes invalid. 1269dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com */ 1279dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com virtual Handle<Object> GetExecutionState() const = 0; 1289dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com virtual Handle<Object> GetEventData() const = 0; 1299dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com 1309dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com /** 1319dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com * Get the context active when the debug event happened. Note this is not 1329dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com * the current active context as the JavaScript part of the debugger is 1337304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org * running in its own context which is entered at this point. 1349dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com */ 1359dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com virtual Handle<Context> GetEventContext() const = 0; 1369dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com 1379dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com /** 1387304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org * Client data passed with the corresponding callback when it was 1397304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org * registered. 1409dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com */ 1419dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com virtual Handle<Value> GetCallbackData() const = 0; 1429dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com 14322762870ddc5995ca60f432799b94a6abd7680cemikhail.naganov@gmail.com /** 14422762870ddc5995ca60f432799b94a6abd7680cemikhail.naganov@gmail.com * Client data passed to DebugBreakForCommand function. The 14522762870ddc5995ca60f432799b94a6abd7680cemikhail.naganov@gmail.com * debugger takes ownership of the data and will delete it even if 14622762870ddc5995ca60f432799b94a6abd7680cemikhail.naganov@gmail.com * there is no message handler. 14722762870ddc5995ca60f432799b94a6abd7680cemikhail.naganov@gmail.com */ 14822762870ddc5995ca60f432799b94a6abd7680cemikhail.naganov@gmail.com virtual ClientData* GetClientData() const = 0; 14922762870ddc5995ca60f432799b94a6abd7680cemikhail.naganov@gmail.com 1509dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com virtual ~EventDetails() {} 1519dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com }; 1529dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com 1539dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com 1549dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com /** 15565dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org * Debug event callback function. 15665dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org * 15765dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org * \param event the type of the debug event that triggered the callback 15865dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org * (enum DebugEvent) 15965dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org * \param exec_state execution state (JavaScript object) 16065dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org * \param event_data event specific data (JavaScript object) 16165dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org * \param data value passed by the user to SetDebugEventListener 16265dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org */ 16365dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org typedef void (*EventCallback)(DebugEvent event, 1645ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org Handle<Object> exec_state, 1655ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org Handle<Object> event_data, 1665ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org Handle<Value> data); 16765dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org 1689dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com /** 1699dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com * Debug event callback function. 1709dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com * 1719dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com * \param event_details object providing information about the debug event 1729dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com * 1739dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com * A EventCallback2 does not take possession of the event data, 1749dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com * and must not rely on the data persisting after the handler returns. 1759dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com */ 1769dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com typedef void (*EventCallback2)(const EventDetails& event_details); 17765dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org 17865dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org /** 17965dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org * Debug message callback function. 18065dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org * 1815ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org * \param message the debug message handler message object 18265dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org * \param length length of the message 1835ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org * \param client_data the data value passed when registering the message handler 1845ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org 1859dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com * A MessageHandler does not take possession of the message string, 18665dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org * and must not rely on the data persisting after the handler returns. 1875ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org * 1885ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org * This message handler is deprecated. Use MessageHandler2 instead. 18965dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org */ 19065dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org typedef void (*MessageHandler)(const uint16_t* message, int length, 1915ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org ClientData* client_data); 1925ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org 1935ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org /** 1945ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org * Debug message callback function. 1955ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org * 1965ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org * \param message the debug message handler message object 197ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * 1989dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com * A MessageHandler does not take possession of the message data, 1995ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org * and must not rely on the data persisting after the handler returns. 2005ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org */ 2015ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org typedef void (*MessageHandler2)(const Message& message); 20265dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org 20365dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org /** 20465dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org * Debug host dispatch callback function. 20565dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org */ 20665dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org typedef void (*HostDispatchHandler)(); 20765dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org 208c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.org /** 209c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.org * Callback function for the host to ensure debug messages are processed. 210c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.org */ 211c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.org typedef void (*DebugMessageDispatchHandler)(); 212c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.org 213245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org // Set a C debug event listener. 214ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org V8_DEPRECATED(static bool SetDebugEventListener( 215ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org EventCallback that, 216ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org Handle<Value> data = Handle<Value>())); 2179dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com static bool SetDebugEventListener2(EventCallback2 that, 2189dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com Handle<Value> data = Handle<Value>()); 21943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 220245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org // Set a JavaScript debug event listener. 221245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org static bool SetDebugEventListener(v8::Handle<v8::Object> that, 22243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Handle<Value> data = Handle<Value>()); 22343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 224ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org // Schedule a debugger break to happen when JavaScript code is run 225ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org // in the given isolate. If no isolate is provided the default 226ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org // isolate is used. 227ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org static void DebugBreak(Isolate* isolate = NULL); 22843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 229ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org // Remove scheduled debugger break in given isolate if it has not 230ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org // happened yet. If no isolate is provided the default isolate is 231ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org // used. 232ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org static void CancelDebugBreak(Isolate* isolate = NULL); 233f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org 234ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org // Break execution of JavaScript in the given isolate (this method 235ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org // can be invoked from a non-VM thread) for further client command 236ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org // execution on a VM thread. Client data is then passed in 237ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org // EventDetails to EventCallback at the moment when the VM actually 238ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org // stops. If no isolate is provided the default isolate is used. 239ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org static void DebugBreakForCommand(ClientData* data = NULL, 240ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org Isolate* isolate = NULL); 24122762870ddc5995ca60f432799b94a6abd7680cemikhail.naganov@gmail.com 2423a37e9b96c768f6b5b6b09542e1cb1a1ece7a022ager@chromium.org // Message based interface. The message protocol is JSON. NOTE the message 2433a37e9b96c768f6b5b6b09542e1cb1a1ece7a022ager@chromium.org // handler thread is not supported any more parameter must be false. 244ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org V8_DEPRECATED(static void SetMessageHandler( 245ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org MessageHandler handler, 246ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org bool message_handler_thread = false)); 2475ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org static void SetMessageHandler2(MessageHandler2 handler); 248ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 249ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org // If no isolate is provided the default isolate is 250ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org // used. 25165dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org static void SendCommand(const uint16_t* command, int length, 252ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org ClientData* client_data = NULL, 253ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org Isolate* isolate = NULL); 254a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 255381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org // Dispatch interface. 25665dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org static void SetHostDispatchHandler(HostDispatchHandler handler, 25765dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org int period = 100); 258381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org 259c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.org /** 260c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.org * Register a callback function to be called when a debug message has been 261c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.org * received and is ready to be processed. For the debug messages to be 262c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.org * processed V8 needs to be entered, and in certain embedding scenarios this 263c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.org * callback can be used to make sure V8 is entered for the debug message to 264c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.org * be processed. Note that debug messages will only be processed if there is 265c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.org * a V8 break. This can happen automatically by using the option 266c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.org * --debugger-auto-break. 267b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * \param provide_locker requires that V8 acquires v8::Locker for you before 268b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * calling handler 269c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.org */ 270c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.org static void SetDebugMessageDispatchHandler( 271b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org DebugMessageDispatchHandler handler, bool provide_locker = false); 272c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.org 273a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org /** 274a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org * Run a JavaScript function in the debugger. 275a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org * \param fun the function to call 276a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org * \param data passed as second argument to the function 277a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org * With this call the debugger is entered and the function specified is called 278a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org * with the execution state as the first argument. This makes it possible to 279a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org * get access to information otherwise not available during normal JavaScript 280df7a284a293865a5fa9390be2e8f82ba3ac8598asgjesse@chromium.org * execution e.g. details on stack frames. Receiver of the function call will 281df7a284a293865a5fa9390be2e8f82ba3ac8598asgjesse@chromium.org * be the debugger context global object, however this is a subject to change. 2827304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org * The following example shows a JavaScript function which when passed to 283df7a284a293865a5fa9390be2e8f82ba3ac8598asgjesse@chromium.org * v8::Debug::Call will return the current line of JavaScript execution. 284a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org * 285a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org * \code 286a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org * function frame_source_line(exec_state) { 287a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org * return exec_state.frame(0).sourceLine(); 288a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org * } 289a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org * \endcode 290a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org */ 291911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org static Local<Value> Call(v8::Handle<v8::Function> fun, 292de88679a78f9dae12fdf7955610969ac4c79b0bemstarzinger@chromium.org Handle<Value> data = Handle<Value>()); 2937be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org 294911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org /** 295911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org * Returns a mirror object for the given object. 296911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org */ 297911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org static Local<Value> GetMirror(v8::Handle<v8::Value> obj); 298911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org 2997be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org /** 3007be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org * Enable the V8 builtin debug agent. The debugger agent will listen on the 3017be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org * supplied TCP/IP port for remote debugger connection. 302bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org * \param name the name of the embedding application 3037be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org * \param port the TCP/IP port to listen on 3040c20e676f8a0209982ff89e5a9c707771748a585fschneider@chromium.org * \param wait_for_connection whether V8 should pause on a first statement 3050c20e676f8a0209982ff89e5a9c707771748a585fschneider@chromium.org * allowing remote debugger to connect before anything interesting happened 3067be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org */ 3070c20e676f8a0209982ff89e5a9c707771748a585fschneider@chromium.org static bool EnableAgent(const char* name, int port, 3080c20e676f8a0209982ff89e5a9c707771748a585fschneider@chromium.org bool wait_for_connection = false); 309b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org 310b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org /** 311c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com * Disable the V8 builtin debug agent. The TCP/IP connection will be closed. 312c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com */ 313c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com static void DisableAgent(); 314c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com 315c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com /** 316b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * Makes V8 process all pending debug messages. 317b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * 318b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * From V8 point of view all debug messages come asynchronously (e.g. from 319b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * remote debugger) but they all must be handled synchronously: V8 cannot 320b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * do 2 things at one time so normal script execution must be interrupted 321b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * for a while. 322b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * 323b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * Generally when message arrives V8 may be in one of 3 states: 324b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * 1. V8 is running script; V8 will automatically interrupt and process all 325b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * pending messages (however auto_break flag should be enabled); 326b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * 2. V8 is suspended on debug breakpoint; in this state V8 is dedicated 327b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * to reading and processing debug messages; 328b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * 3. V8 is not running at all or has called some long-working C++ function; 3297304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org * by default it means that processing of all debug messages will be deferred 330b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * until V8 gets control again; however, embedding application may improve 331b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * this by manually calling this method. 332b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * 333b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * It makes sense to call this method whenever a new debug message arrived and 334b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * V8 is not already running. Method v8::Debug::SetDebugMessageDispatchHandler 335b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * should help with the former condition. 336b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * 337b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * Technically this method in many senses is equivalent to executing empty 338b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * script: 339b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * 1. It does nothing except for processing all pending debug messages. 340b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * 2. It should be invoked with the same precautions and from the same context 341b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * as V8 script would be invoked from, because: 342b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * a. with "evaluate" command it can do whatever normal script can do, 343b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * including all native calls; 344b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * b. no other thread should call V8 while this method is running 345b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * (v8::Locker may be used here). 346b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * 347b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * "Evaluate" debug command behavior currently is not specified in scope 348b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org * of this method. 349b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org */ 350b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org static void ProcessDebugMessages(); 351df7a284a293865a5fa9390be2e8f82ba3ac8598asgjesse@chromium.org 352df7a284a293865a5fa9390be2e8f82ba3ac8598asgjesse@chromium.org /** 3537304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org * Debugger is running in its own context which is entered while debugger 354df7a284a293865a5fa9390be2e8f82ba3ac8598asgjesse@chromium.org * messages are being dispatched. This is an explicit getter for this 355df7a284a293865a5fa9390be2e8f82ba3ac8598asgjesse@chromium.org * debugger context. Note that the content of the debugger context is subject 356df7a284a293865a5fa9390be2e8f82ba3ac8598asgjesse@chromium.org * to change. 357df7a284a293865a5fa9390be2e8f82ba3ac8598asgjesse@chromium.org */ 358df7a284a293865a5fa9390be2e8f82ba3ac8598asgjesse@chromium.org static Local<Context> GetDebugContext(); 359de88679a78f9dae12fdf7955610969ac4c79b0bemstarzinger@chromium.org 360de88679a78f9dae12fdf7955610969ac4c79b0bemstarzinger@chromium.org 361de88679a78f9dae12fdf7955610969ac4c79b0bemstarzinger@chromium.org /** 362de88679a78f9dae12fdf7955610969ac4c79b0bemstarzinger@chromium.org * Enable/disable LiveEdit functionality for the given Isolate 363de88679a78f9dae12fdf7955610969ac4c79b0bemstarzinger@chromium.org * (default Isolate if not provided). V8 will abort if LiveEdit is 364de88679a78f9dae12fdf7955610969ac4c79b0bemstarzinger@chromium.org * unexpectedly used. LiveEdit is enabled by default. 365de88679a78f9dae12fdf7955610969ac4c79b0bemstarzinger@chromium.org */ 366de88679a78f9dae12fdf7955610969ac4c79b0bemstarzinger@chromium.org static void SetLiveEditEnabled(bool enable, Isolate* isolate = NULL); 36743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 36843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 36943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 37043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} // namespace v8 37143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 37243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 37343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#undef EXPORT 37443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 37543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3765ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org#endif // V8_V8_DEBUG_H_ 377