diff --git a/lldb/include/lldb/Interpreter/CommandInterpreter.h b/lldb/include/lldb/Interpreter/CommandInterpreter.h --- a/lldb/include/lldb/Interpreter/CommandInterpreter.h +++ b/lldb/include/lldb/Interpreter/CommandInterpreter.h @@ -324,8 +324,9 @@ lldb::CommandObjectSP &command_obj_sp, llvm::StringRef args_string = llvm::StringRef()); - // Remove a command if it is removable (python or regex command) - bool RemoveCommand(llvm::StringRef cmd); + /// Remove a command if it is removable (python or regex command). If \b force + /// is provided, the command is removed regardless of its removable status. + bool RemoveCommand(llvm::StringRef cmd, bool force = false); bool RemoveAlias(llvm::StringRef alias_name); diff --git a/lldb/source/Interpreter/CommandInterpreter.cpp b/lldb/source/Interpreter/CommandInterpreter.cpp --- a/lldb/source/Interpreter/CommandInterpreter.cpp +++ b/lldb/source/Interpreter/CommandInterpreter.cpp @@ -1374,11 +1374,12 @@ return false; } -bool CommandInterpreter::RemoveCommand(llvm::StringRef cmd) { +bool CommandInterpreter::RemoveCommand(llvm::StringRef cmd, bool force) { auto pos = m_command_dict.find(std::string(cmd)); if (pos != m_command_dict.end()) { - if (pos->second->IsRemovable()) { - // Only regular expression objects or python commands are removable + if (force || pos->second->IsRemovable()) { + // Only regular expression objects or python commands are removable under + // normal circumstances. m_command_dict.erase(pos); return true; }