summaryrefslogtreecommitdiffstats
path: root/lldb/source/Interpreter
diff options
context:
space:
mode:
authorJohnny Chen <johnny.chen@apple.com>2011-09-09 23:25:26 +0000
committerJohnny Chen <johnny.chen@apple.com>2011-09-09 23:25:26 +0000
commitb1d7529e570545a8faceae1c7bf82ed4384e902e (patch)
tree76dd35da3323404ef5cd7067c145965fd8d7edaf /lldb/source/Interpreter
parent56247076847790933b5e91639f466c8c7f11ea4a (diff)
downloadbcm5719-llvm-b1d7529e570545a8faceae1c7bf82ed4384e902e.tar.gz
bcm5719-llvm-b1d7529e570545a8faceae1c7bf82ed4384e902e.zip
Add OptionGroupWatchpoint.cpp/.h (preparatory work) for hooking up watchpoint to the 'frame variable' comand.
To watch a variable for read/write, issue: frame variable -w read_write Note that '-w' option is not working yet. :-) llvm-svn: 139434
Diffstat (limited to 'lldb/source/Interpreter')
-rw-r--r--lldb/source/Interpreter/CommandObject.cpp3
-rw-r--r--lldb/source/Interpreter/OptionGroupWatchpoint.cpp90
2 files changed, 92 insertions, 1 deletions
diff --git a/lldb/source/Interpreter/CommandObject.cpp b/lldb/source/Interpreter/CommandObject.cpp
index b1eafd5e30f..c3547e23995 100644
--- a/lldb/source/Interpreter/CommandObject.cpp
+++ b/lldb/source/Interpreter/CommandObject.cpp
@@ -829,7 +829,8 @@ CommandObject::g_arguments_data[] =
{ eArgTypeValue, "value", CommandCompletions::eNoCompletion, { NULL, false }, "A value could be anything, depending on where and how it is used." },
{ eArgTypeWidth, "width", CommandCompletions::eNoCompletion, { NULL, false }, "Help text goes here." },
{ eArgTypeNone, "none", CommandCompletions::eNoCompletion, { NULL, false }, "No help available for this." },
- { eArgTypePlatform, "platform-name", CommandCompletions::ePlatformPluginCompletion, { NULL, false }, "The name of an installed platform plug-in . Type 'platform list' to see a complete list of installed platforms." }
+ { eArgTypePlatform, "platform-name", CommandCompletions::ePlatformPluginCompletion, { NULL, false }, "The name of an installed platform plug-in . Type 'platform list' to see a complete list of installed platforms." },
+ { eArgTypeWatchMode, "watch-mode", CommandCompletions::eNoCompletion, { NULL, false }, "Specify the mode for a watchpoint." }
};
const CommandObject::ArgumentTableEntry*
diff --git a/lldb/source/Interpreter/OptionGroupWatchpoint.cpp b/lldb/source/Interpreter/OptionGroupWatchpoint.cpp
new file mode 100644
index 00000000000..6d1fcb75e5b
--- /dev/null
+++ b/lldb/source/Interpreter/OptionGroupWatchpoint.cpp
@@ -0,0 +1,90 @@
+//===-- OptionGroupWatchpoint.cpp -------------------------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "lldb/Interpreter/OptionGroupWatchpoint.h"
+
+// C Includes
+// C++ Includes
+// Other libraries and framework includes
+// Project includes
+#include "lldb/lldb-enumerations.h"
+#include "lldb/Interpreter/Args.h"
+
+using namespace lldb;
+using namespace lldb_private;
+
+static OptionEnumValueElement g_watch_mode[] =
+{
+ { OptionGroupWatchpoint::eWatchRead, "read", "Watch for read"},
+ { OptionGroupWatchpoint::eWatchWrite, "write", "Watch for write"},
+ { OptionGroupWatchpoint::eWatchReadWrite, "read_write", "Watch for read/write"},
+ { 0, NULL, NULL }
+};
+
+// if you add any options here, remember to update the counters in OptionGroupWatchpoint::GetNumDefinitions()
+static OptionDefinition
+g_option_table[] =
+{
+ { LLDB_OPT_SET_1, false, "watch", 'w', required_argument, g_watch_mode, 0, eArgTypeWatchMode, "Determine how to watch a memory location (read, write, or read/write)."}
+};
+
+
+OptionGroupWatchpoint::OptionGroupWatchpoint () :
+ OptionGroup()
+{
+}
+
+OptionGroupWatchpoint::~OptionGroupWatchpoint ()
+{
+}
+
+Error
+OptionGroupWatchpoint::SetOptionValue (CommandInterpreter &interpreter,
+ uint32_t option_idx,
+ const char *option_arg)
+{
+ Error error;
+ char short_option = (char) g_option_table[option_idx].short_option;
+ switch (short_option)
+ {
+ case 'w': {
+ watch_variable = false;
+ OptionEnumValueElement *enum_values = g_option_table[option_idx].enum_values;
+ watch_mode = (WatchMode) Args::StringToOptionEnum(option_arg, enum_values, 0, &watch_variable);
+ break;
+ }
+ default:
+ error.SetErrorStringWithFormat("Invalid short option character '%c'.\n", short_option);
+ break;
+ }
+
+ return error;
+}
+
+void
+OptionGroupWatchpoint::OptionParsingStarting (CommandInterpreter &interpreter)
+{
+ watch_variable = false;
+ watch_mode = eWatchRead;
+}
+
+
+const OptionDefinition*
+OptionGroupWatchpoint::GetDefinitions ()
+{
+ return g_option_table;
+}
+
+uint32_t
+OptionGroupWatchpoint::GetNumDefinitions ()
+{
+ return 1;
+}
+
+
OpenPOWER on IntegriCloud