| Index: runtime/bin/dbg_message.h
|
| diff --git a/runtime/bin/dbg_message.h b/runtime/bin/dbg_message.h
|
| deleted file mode 100644
|
| index 0714174ac695c82823d0fc60882b6efcac586a0c..0000000000000000000000000000000000000000
|
| --- a/runtime/bin/dbg_message.h
|
| +++ /dev/null
|
| @@ -1,282 +0,0 @@
|
| -// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
|
| -// for details. All rights reserved. Use of this source code is governed by a
|
| -// BSD-style license that can be found in the LICENSE file.
|
| -
|
| -#ifndef BIN_DBG_MESSAGE_H_
|
| -#define BIN_DBG_MESSAGE_H_
|
| -
|
| -#include "bin/builtin.h"
|
| -#include "bin/thread.h"
|
| -#include "bin/utils.h"
|
| -
|
| -#include "include/dart_tools_api.h"
|
| -
|
| -#include "platform/globals.h"
|
| -#include "platform/json.h"
|
| -
|
| -
|
| -namespace dart {
|
| -namespace bin {
|
| -
|
| -// TODO(hausner): Need better error handling.
|
| -#define ASSERT_NOT_ERROR(handle) \
|
| - ASSERT(!Dart_IsError(handle))
|
| -
|
| -#define RETURN_IF_ERROR(handle) \
|
| - if (Dart_IsError(handle)) { \
|
| - return Dart_GetError(handle); \
|
| - }
|
| -
|
| -
|
| -// Class to parse a JSON debug command message.
|
| -class MessageParser {
|
| - public:
|
| - MessageParser(const char* buf, int buf_length)
|
| - : buf_(buf), buf_length_(buf_length) {
|
| - }
|
| - ~MessageParser() { }
|
| -
|
| - // Accessors.
|
| - const char* buf() const { return buf_; }
|
| -
|
| - bool IsValidMessage() const;
|
| - int MessageId() const;
|
| -
|
| - const char* Params() const;
|
| - bool HasParam(const char* name) const;
|
| - intptr_t GetIntParam(const char* name) const;
|
| - int64_t GetInt64Param(const char* name) const;
|
| - intptr_t GetOptIntParam(const char* name, intptr_t default_val) const;
|
| -
|
| - // GetStringParam mallocs the buffer that it returns. Caller must free.
|
| - char* GetStringParam(const char* name) const;
|
| -
|
| - private:
|
| - const char* buf_;
|
| - int buf_length_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(MessageParser);
|
| -};
|
| -
|
| -
|
| -// Class which represents a debug command message and handles it.
|
| -class DbgMessage {
|
| - public:
|
| - DbgMessage(int32_t cmd_idx, const char* start,
|
| - const char* end, intptr_t debug_fd)
|
| - : next_(NULL), cmd_idx_(cmd_idx),
|
| - buffer_(NULL), buffer_len_(end - start),
|
| - debug_fd_(debug_fd) {
|
| - buffer_ = reinterpret_cast<char*>(malloc(buffer_len_));
|
| - ASSERT(buffer_ != NULL);
|
| - memmove(buffer_, start, buffer_len_);
|
| - }
|
| - ~DbgMessage() {
|
| - next_ = NULL;
|
| - free(buffer_);
|
| - }
|
| -
|
| - // Accessors.
|
| - DbgMessage* next() const { return next_; }
|
| - void set_next(DbgMessage* next) { next_ = next; }
|
| - char* buffer() const { return buffer_; }
|
| - int32_t buffer_len() const { return buffer_len_; }
|
| - intptr_t debug_fd() const { return debug_fd_; }
|
| -
|
| - // Handle debugger command message.
|
| - // Returns true if the execution needs to resume after this message is
|
| - // handled, false otherwise.
|
| - bool HandleMessage();
|
| -
|
| - // Send reply after successful handling of command.
|
| - void SendReply(dart::TextBuffer* msg);
|
| -
|
| - // Reply error returned by the command handler.
|
| - void SendErrorReply(int msg_id, const char* err_msg);
|
| -
|
| - // Handlers for specific commands, they are static because these
|
| - // functions are populated as function pointers into a dispatch table.
|
| - static bool HandleResumeCmd(DbgMessage* msg);
|
| - static bool HandleStepIntoCmd(DbgMessage* msg);
|
| - static bool HandleStepOverCmd(DbgMessage* msg);
|
| - static bool HandleStepOutCmd(DbgMessage* msg);
|
| - static bool HandleGetLibrariesCmd(DbgMessage* msg);
|
| - static bool HandleGetClassPropsCmd(DbgMessage* msg);
|
| - static bool HandleGetLibPropsCmd(DbgMessage* msg);
|
| - static bool HandleSetLibPropsCmd(DbgMessage* msg);
|
| - static bool HandleGetGlobalsCmd(DbgMessage* msg);
|
| - static bool HandleEvaluateExprCmd(DbgMessage* msg);
|
| - static bool HandleGetObjPropsCmd(DbgMessage* msg);
|
| - static bool HandleGetListCmd(DbgMessage* msg);
|
| - static bool HandleGetScriptURLsCmd(DbgMessage* msg);
|
| - static bool HandleGetSourceCmd(DbgMessage* msg);
|
| - static bool HandleGetLineNumbersCmd(DbgMessage* msg);
|
| - static bool HandleGetStackTraceCmd(DbgMessage* msg);
|
| - static bool HandlePauseOnExcCmd(DbgMessage* msg);
|
| - static bool HandleSetBpCmd(DbgMessage* msg);
|
| - static bool HandleRemBpCmd(DbgMessage* msg);
|
| -
|
| - private:
|
| - DbgMessage* next_; // Next message in the queue.
|
| - int32_t cmd_idx_; // Isolate specific debugger command index.
|
| - char* buffer_; // Debugger command message.
|
| - int32_t buffer_len_; // Length of the debugger command message.
|
| - intptr_t debug_fd_; // Debugger connection on which replies are to be sent.
|
| -
|
| - DISALLOW_IMPLICIT_CONSTRUCTORS(DbgMessage);
|
| -};
|
| -
|
| -
|
| -// Class which represents a queue of debug command messages sent to an isolate.
|
| -class DbgMsgQueue {
|
| - public:
|
| - DbgMsgQueue(Dart_IsolateId isolate_id, DbgMsgQueue* next)
|
| - : is_running_(true),
|
| - is_interrupted_(false),
|
| - msglist_head_(NULL),
|
| - msglist_tail_(NULL),
|
| - queued_output_messages_(64),
|
| - isolate_id_(isolate_id),
|
| - next_(next) {
|
| - }
|
| - ~DbgMsgQueue() {
|
| - DbgMessage* msg = msglist_head_;
|
| - while (msglist_head_ != NULL) {
|
| - msglist_head_ = msglist_head_->next();
|
| - delete msg;
|
| - msg = msglist_head_;
|
| - }
|
| - msglist_tail_ = NULL;
|
| - isolate_id_ = ILLEGAL_ISOLATE_ID;
|
| - next_ = NULL;
|
| - }
|
| -
|
| - // Accessors.
|
| - Dart_IsolateId isolate_id() const { return isolate_id_; }
|
| - DbgMsgQueue* next() const { return next_; }
|
| - void set_next(DbgMsgQueue* next) { next_ = next; }
|
| -
|
| - // Add specified debug command message to the queue.
|
| - void AddMessage(int32_t cmd_idx,
|
| - const char* start,
|
| - const char* end,
|
| - intptr_t debug_fd);
|
| -
|
| - // Notify an isolate of a pending vmservice message.
|
| - void Notify();
|
| -
|
| - // Run a message loop which handles messages as they arrive until
|
| - // normal program execution resumes.
|
| - void MessageLoop();
|
| -
|
| - // Handle any pending debug command messages in the queue. Return
|
| - // value indicates whether a resume has been requested.
|
| - bool HandlePendingMessages();
|
| -
|
| - // Interrupt Isolate.
|
| - void InterruptIsolate();
|
| -
|
| - // Queue output messages, these are sent out when we hit an event.
|
| - void QueueOutputMsg(dart::TextBuffer* msg);
|
| -
|
| - // Send all queued messages over to the debugger.
|
| - void SendQueuedMsgs();
|
| -
|
| - // Send breakpoint event message over to the debugger.
|
| - void SendBreakpointEvent(intptr_t bp_id, const Dart_CodeLocation& location);
|
| -
|
| - // Send Exception event message over to the debugger.
|
| - void SendExceptionEvent(Dart_Handle exception, Dart_StackTrace trace);
|
| -
|
| - // Send Isolate event message over to the debugger.
|
| - void SendIsolateEvent(Dart_IsolateId isolate_id, Dart_IsolateEvent kind);
|
| -
|
| - private:
|
| - bool is_running_; // True if isolate is running and not in the debugger loop.
|
| - bool is_interrupted_; // True if interrupt command is pending.
|
| -
|
| - DbgMessage* msglist_head_; // Start of debugger messages list.
|
| - DbgMessage* msglist_tail_; // End of debugger messages list.
|
| -
|
| - // Text buffer that accumulates messages to be output.
|
| - dart::TextBuffer queued_output_messages_;
|
| -
|
| - Dart_IsolateId isolate_id_; // Id of the isolate tied to this queue.
|
| -
|
| - DbgMsgQueue* next_; // Used for creating a list of message queues.
|
| -
|
| - // The isolate waits on this condition variable when it needs to process
|
| - // debug messages.
|
| - Monitor msg_queue_lock_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(DbgMsgQueue);
|
| -};
|
| -
|
| -
|
| -// Maintains a list of message queues.
|
| -class DbgMsgQueueList {
|
| - public:
|
| - static const int32_t kInvalidCommand = -1;
|
| -
|
| - // Initialize the message queue processing by setting up the appropriate
|
| - // handlers.
|
| - static void Initialize();
|
| -
|
| - // Parses the input message and returns the command index if the message
|
| - // contains a valid isolate specific command.
|
| - // It returns kInvalidCommand otherwise.
|
| - static int32_t LookupIsolateCommand(const char* buf, int32_t buflen);
|
| -
|
| - // Queue debugger message targetted for the isolate.
|
| - static bool AddIsolateMessage(Dart_IsolateId isolate_id,
|
| - int32_t cmd_idx,
|
| - const char* start,
|
| - const char* end,
|
| - intptr_t debug_fd);
|
| -
|
| - // Notify an isolate of a pending vmservice message.
|
| - static void NotifyIsolate(Dart_Isolate isolate);
|
| -
|
| - // Interrupt isolate.
|
| - static bool InterruptIsolate(Dart_IsolateId isolate_id);
|
| -
|
| - // Add Debugger Message Queue corresponding to the Isolate.
|
| - static DbgMsgQueue* AddIsolateMsgQueue(Dart_IsolateId isolate_id);
|
| -
|
| - // Get Debugger Message Queue corresponding to the Isolate.
|
| - static DbgMsgQueue* GetIsolateMsgQueue(Dart_IsolateId isolate_id);
|
| -
|
| - // Remove Debugger Message Queue corresponding to the Isolate.
|
| - static void RemoveIsolateMsgQueue(Dart_IsolateId isolate_id);
|
| -
|
| - // Generic handlers for breakpoints, exceptions and delayed breakpoint
|
| - // resolution.
|
| - static void BptResolvedHandler(Dart_IsolateId isolate_id,
|
| - intptr_t bp_id,
|
| - const Dart_CodeLocation& location);
|
| - static void PausedEventHandler(Dart_IsolateId isolate_id,
|
| - intptr_t bp_id,
|
| - const Dart_CodeLocation& loc);
|
| - static void ExceptionThrownHandler(Dart_IsolateId isolate_id,
|
| - Dart_Handle exception,
|
| - Dart_StackTrace stack_trace);
|
| - static void IsolateEventHandler(Dart_IsolateId isolate_id,
|
| - Dart_IsolateEvent kind);
|
| -
|
| - // Print list of isolate ids of all message queues into text buffer.
|
| - static void ListIsolateIds(dart::TextBuffer* msg);
|
| -
|
| - private:
|
| - static DbgMsgQueue* GetIsolateMsgQueueLocked(Dart_IsolateId isolate_id);
|
| -
|
| - static DbgMsgQueue* list_;
|
| - static Mutex* msg_queue_list_lock_;
|
| -
|
| - DISALLOW_ALLOCATION();
|
| - DISALLOW_IMPLICIT_CONSTRUCTORS(DbgMsgQueueList);
|
| -};
|
| -
|
| -} // namespace bin
|
| -} // namespace dart
|
| -
|
| -#endif // BIN_DBG_MESSAGE_H_
|
|
|