aboutsummaryrefslogtreecommitdiff
path: root/lldb/source/Commands/CommandObjectFrame.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source/Commands/CommandObjectFrame.cpp')
-rw-r--r--lldb/source/Commands/CommandObjectFrame.cpp147
1 files changed, 105 insertions, 42 deletions
diff --git a/lldb/source/Commands/CommandObjectFrame.cpp b/lldb/source/Commands/CommandObjectFrame.cpp
index d8091e8..142f969 100644
--- a/lldb/source/Commands/CommandObjectFrame.cpp
+++ b/lldb/source/Commands/CommandObjectFrame.cpp
@@ -930,10 +930,13 @@ protected:
};
static void
-PrintRecognizerDetails(Stream &strm, const std::string &name,
+PrintRecognizerDetails(Stream &strm, const std::string &name, bool enabled,
const std::string &module,
llvm::ArrayRef<lldb_private::ConstString> symbols,
Mangled::NamePreference symbol_mangling, bool regexp) {
+ if (!enabled)
+ strm << "[disabled] ";
+
strm << name << ", ";
if (!module.empty())
@@ -957,17 +960,18 @@ PrintRecognizerDetails(Stream &strm, const std::string &name,
llvm::interleaveComma(symbols, strm);
}
-class CommandObjectFrameRecognizerDelete : public CommandObjectParsed {
+// Base class for commands which accept a single frame recognizer as an argument
+class CommandObjectWithFrameRecognizerArg : public CommandObjectParsed {
public:
- CommandObjectFrameRecognizerDelete(CommandInterpreter &interpreter)
- : CommandObjectParsed(interpreter, "frame recognizer delete",
- "Delete an existing frame recognizer by id.",
- nullptr) {
+ CommandObjectWithFrameRecognizerArg(CommandInterpreter &interpreter,
+ const char *name,
+ const char *help = nullptr,
+ const char *syntax = nullptr,
+ uint32_t flags = 0)
+ : CommandObjectParsed(interpreter, name, help, syntax, flags) {
AddSimpleArgumentList(eArgTypeRecognizerID);
}
- ~CommandObjectFrameRecognizerDelete() override = default;
-
void
HandleArgumentCompletion(CompletionRequest &request,
OptionElementVector &opt_element_vector) override {
@@ -975,52 +979,105 @@ public:
return;
GetTarget().GetFrameRecognizerManager().ForEach(
- [&request](uint32_t rid, std::string rname, std::string module,
+ [&request](uint32_t rid, bool enabled, std::string rname,
+ std::string module,
llvm::ArrayRef<lldb_private::ConstString> symbols,
Mangled::NamePreference symbol_mangling, bool regexp) {
StreamString strm;
if (rname.empty())
rname = "(internal)";
- PrintRecognizerDetails(strm, rname, module, symbols, symbol_mangling,
- regexp);
+ PrintRecognizerDetails(strm, rname, enabled, module, symbols,
+ symbol_mangling, regexp);
request.TryCompleteCurrentArg(std::to_string(rid), strm.GetString());
});
}
-protected:
- void DoExecute(Args &command, CommandReturnObject &result) override {
- if (command.GetArgumentCount() == 0) {
- if (!m_interpreter.Confirm(
- "About to delete all frame recognizers, do you want to do that?",
- true)) {
- result.AppendMessage("Operation cancelled...");
- return;
- }
+ virtual void DoExecuteWithId(CommandReturnObject &result,
+ uint32_t recognizer_id) = 0;
- GetTarget().GetFrameRecognizerManager().RemoveAllRecognizers();
- result.SetStatus(eReturnStatusSuccessFinishResult);
+ void DoExecute(Args &command, CommandReturnObject &result) override {
+ uint32_t recognizer_id;
+ if (!llvm::to_integer(command.GetArgumentAtIndex(0), recognizer_id)) {
+ result.AppendErrorWithFormat("'%s' is not a valid recognizer id.\n",
+ command.GetArgumentAtIndex(0));
return;
}
- if (command.GetArgumentCount() != 1) {
- result.AppendErrorWithFormat("'%s' takes zero or one arguments.\n",
- m_cmd_name.c_str());
+ DoExecuteWithId(result, recognizer_id);
+ }
+};
+
+class CommandObjectFrameRecognizerEnable
+ : public CommandObjectWithFrameRecognizerArg {
+public:
+ CommandObjectFrameRecognizerEnable(CommandInterpreter &interpreter)
+ : CommandObjectWithFrameRecognizerArg(
+ interpreter, "frame recognizer enable",
+ "Enable a frame recognizer by id.", nullptr) {
+ AddSimpleArgumentList(eArgTypeRecognizerID);
+ }
+
+ ~CommandObjectFrameRecognizerEnable() override = default;
+
+protected:
+ void DoExecuteWithId(CommandReturnObject &result,
+ uint32_t recognizer_id) override {
+ auto &recognizer_mgr = GetTarget().GetFrameRecognizerManager();
+ if (!recognizer_mgr.SetEnabledForID(recognizer_id, true)) {
+ result.AppendErrorWithFormat("'%u' is not a valid recognizer id.\n",
+ recognizer_id);
return;
}
+ result.SetStatus(eReturnStatusSuccessFinishResult);
+ }
+};
- uint32_t recognizer_id;
- if (!llvm::to_integer(command.GetArgumentAtIndex(0), recognizer_id)) {
- result.AppendErrorWithFormat("'%s' is not a valid recognizer id.\n",
- command.GetArgumentAtIndex(0));
+class CommandObjectFrameRecognizerDisable
+ : public CommandObjectWithFrameRecognizerArg {
+public:
+ CommandObjectFrameRecognizerDisable(CommandInterpreter &interpreter)
+ : CommandObjectWithFrameRecognizerArg(
+ interpreter, "frame recognizer disable",
+ "Disable a frame recognizer by id.", nullptr) {
+ AddSimpleArgumentList(eArgTypeRecognizerID);
+ }
+
+ ~CommandObjectFrameRecognizerDisable() override = default;
+
+protected:
+ void DoExecuteWithId(CommandReturnObject &result,
+ uint32_t recognizer_id) override {
+ auto &recognizer_mgr = GetTarget().GetFrameRecognizerManager();
+ if (!recognizer_mgr.SetEnabledForID(recognizer_id, false)) {
+ result.AppendErrorWithFormat("'%u' is not a valid recognizer id.\n",
+ recognizer_id);
return;
}
+ result.SetStatus(eReturnStatusSuccessFinishResult);
+ }
+};
- if (!GetTarget().GetFrameRecognizerManager().RemoveRecognizerWithID(
- recognizer_id)) {
- result.AppendErrorWithFormat("'%s' is not a valid recognizer id.\n",
- command.GetArgumentAtIndex(0));
+class CommandObjectFrameRecognizerDelete
+ : public CommandObjectWithFrameRecognizerArg {
+public:
+ CommandObjectFrameRecognizerDelete(CommandInterpreter &interpreter)
+ : CommandObjectWithFrameRecognizerArg(
+ interpreter, "frame recognizer delete",
+ "Delete an existing frame recognizer by id.", nullptr) {
+ AddSimpleArgumentList(eArgTypeRecognizerID);
+ }
+
+ ~CommandObjectFrameRecognizerDelete() override = default;
+
+protected:
+ void DoExecuteWithId(CommandReturnObject &result,
+ uint32_t recognizer_id) override {
+ auto &recognizer_mgr = GetTarget().GetFrameRecognizerManager();
+ if (!recognizer_mgr.RemoveRecognizerWithID(recognizer_id)) {
+ result.AppendErrorWithFormat("'%u' is not a valid recognizer id.\n",
+ recognizer_id);
return;
}
result.SetStatus(eReturnStatusSuccessFinishResult);
@@ -1041,7 +1098,7 @@ protected:
bool any_printed = false;
GetTarget().GetFrameRecognizerManager().ForEach(
[&result,
- &any_printed](uint32_t recognizer_id, std::string name,
+ &any_printed](uint32_t recognizer_id, bool enabled, std::string name,
std::string module, llvm::ArrayRef<ConstString> symbols,
Mangled::NamePreference symbol_mangling, bool regexp) {
Stream &stream = result.GetOutputStream();
@@ -1050,8 +1107,8 @@ protected:
name = "(internal)";
stream << std::to_string(recognizer_id) << ": ";
- PrintRecognizerDetails(stream, name, module, symbols, symbol_mangling,
- regexp);
+ PrintRecognizerDetails(stream, name, enabled, module, symbols,
+ symbol_mangling, regexp);
stream.EOL();
stream.Flush();
@@ -1135,18 +1192,24 @@ public:
interpreter, "frame recognizer",
"Commands for editing and viewing frame recognizers.",
"frame recognizer [<sub-command-options>] ") {
+ LoadSubCommand("info", CommandObjectSP(new CommandObjectFrameRecognizerInfo(
+ interpreter)));
+ LoadSubCommand("list", CommandObjectSP(new CommandObjectFrameRecognizerList(
+ interpreter)));
LoadSubCommand("add", CommandObjectSP(new CommandObjectFrameRecognizerAdd(
interpreter)));
LoadSubCommand(
- "clear",
- CommandObjectSP(new CommandObjectFrameRecognizerClear(interpreter)));
+ "enable",
+ CommandObjectSP(new CommandObjectFrameRecognizerEnable(interpreter)));
+ LoadSubCommand(
+ "disable",
+ CommandObjectSP(new CommandObjectFrameRecognizerDisable(interpreter)));
LoadSubCommand(
"delete",
CommandObjectSP(new CommandObjectFrameRecognizerDelete(interpreter)));
- LoadSubCommand("list", CommandObjectSP(new CommandObjectFrameRecognizerList(
- interpreter)));
- LoadSubCommand("info", CommandObjectSP(new CommandObjectFrameRecognizerInfo(
- interpreter)));
+ LoadSubCommand(
+ "clear",
+ CommandObjectSP(new CommandObjectFrameRecognizerClear(interpreter)));
}
~CommandObjectFrameRecognizer() override = default;