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

Unified Diff: runtime/bin/dbg_message.h

Issue 1497033003: - Remove the legacy debug protocol. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years 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 side-by-side diff with in-line comments
Download patch
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_

Powered by Google App Engine
This is Rietveld 408576698