# Read-write watchpoints not supported on SystemZ
@expectedFailureAll(archs=['s390x'])
- def test_rw_watchpoint_delete(self):
- """Test delete watchpoint and expect not to stop for watchpoint."""
- self.build(dictionary=self.d)
- self.setTearDownCleanup(dictionary=self.d)
-
- exe = self.getBuildArtifact(self.exe_name)
- self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET)
-
- # Add a breakpoint to set a watchpoint when stopped on the breakpoint.
- lldbutil.run_break_set_by_file_and_line(
- self, None, self.line, num_expected_locations=1)
-
- # Run the program.
- self.runCmd("run", RUN_SUCCEEDED)
-
- # We should be stopped again due to the breakpoint.
- # The stop reason of the thread should be breakpoint.
- self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT,
- substrs=['stopped',
- 'stop reason = breakpoint'])
-
- # Now let's set a read_write-type watchpoint for 'global'.
- # There should be two watchpoint hits (see main.c).
- self.expect(
- "watchpoint set variable -w read_write global",
- WATCHPOINT_CREATED,
- substrs=[
- 'Watchpoint created',
- 'size = 4',
- 'type = rw',
- '%s:%d' %
- (self.source,
- self.decl)])
-
- # Delete the watchpoint immediately using the force option.
- self.expect("watchpoint delete --force",
- substrs=['All watchpoints removed.'])
-
- # Use the '-v' option to do verbose listing of the watchpoint.
- self.runCmd("watchpoint list -v")
-
- self.runCmd("process continue")
-
- # There should be no more watchpoint hit and the process status should
- # be 'exited'.
- self.expect("process status",
- substrs=['exited'])
-
- # Read-write watchpoints not supported on SystemZ
- @expectedFailureAll(archs=['s390x'])
def test_rw_watchpoint_set_ignore_count(self):
"""Test watchpoint ignore count and expect to not to stop at all."""
self.build(dictionary=self.d)
};
// CommandObjectWatchpointDelete
-#define LLDB_OPTIONS_watchpoint_delete
-#include "CommandOptions.inc"
-
-// CommandObjectWatchpointDelete
#pragma mark Delete
class CommandObjectWatchpointDelete : public CommandObjectParsed {
: CommandObjectParsed(interpreter, "watchpoint delete",
"Delete the specified watchpoint(s). If no "
"watchpoints are specified, delete them all.",
- nullptr, eCommandRequiresTarget),
- m_options() {
+ nullptr, eCommandRequiresTarget) {
CommandArgumentEntry arg;
CommandObject::AddIDsArgumentData(arg, eArgTypeWatchpointID,
eArgTypeWatchpointIDRange);
~CommandObjectWatchpointDelete() override = default;
- Options *GetOptions() override { return &m_options; }
-
- class CommandOptions : public Options {
- public:
- CommandOptions() : Options(), m_force(false) {}
-
- ~CommandOptions() override = default;
-
- Status SetOptionValue(uint32_t option_idx, llvm::StringRef option_arg,
- ExecutionContext *execution_context) override {
- const int short_option = m_getopt_table[option_idx].val;
-
- switch (short_option) {
- case 'f':
- m_force = true;
- break;
- default:
- llvm_unreachable("Unimplemented option");
- }
-
- return {};
- }
-
- void OptionParsingStarting(ExecutionContext *execution_context) override {
- m_force = false;
- }
-
- llvm::ArrayRef<OptionDefinition> GetDefinitions() override {
- return llvm::makeArrayRef(g_watchpoint_delete_options);
- }
-
- // Instance variables to hold the values for command options.
- bool m_force;
- };
-
protected:
bool DoExecute(Args &command, CommandReturnObject &result) override {
Target *target = &GetSelectedTarget();
return false;
}
- if (command.empty()) {
- if (!m_options.m_force &&
- !m_interpreter.Confirm(
+ if (command.GetArgumentCount() == 0) {
+ if (!m_interpreter.Confirm(
"About to delete all watchpoints, do you want to do that?",
true)) {
result.AppendMessage("Operation cancelled...");
(uint64_t)num_watchpoints);
}
result.SetStatus(eReturnStatusSuccessFinishNoResult);
- return result.Succeeded();
- }
+ } else {
+ // Particular watchpoints selected; delete them.
+ std::vector<uint32_t> wp_ids;
+ if (!CommandObjectMultiwordWatchpoint::VerifyWatchpointIDs(
+ target, command, wp_ids)) {
+ result.AppendError("Invalid watchpoints specification.");
+ result.SetStatus(eReturnStatusFailed);
+ return false;
+ }
- // Particular watchpoints selected; delete them.
- std::vector<uint32_t> wp_ids;
- if (!CommandObjectMultiwordWatchpoint::VerifyWatchpointIDs(target, command,
- wp_ids)) {
- result.AppendError("Invalid watchpoints specification.");
- result.SetStatus(eReturnStatusFailed);
- return false;
+ int count = 0;
+ const size_t size = wp_ids.size();
+ for (size_t i = 0; i < size; ++i)
+ if (target->RemoveWatchpointByID(wp_ids[i]))
+ ++count;
+ result.AppendMessageWithFormat("%d watchpoints deleted.\n", count);
+ result.SetStatus(eReturnStatusSuccessFinishNoResult);
}
- int count = 0;
- const size_t size = wp_ids.size();
- for (size_t i = 0; i < size; ++i)
- if (target->RemoveWatchpointByID(wp_ids[i]))
- ++count;
- result.AppendMessageWithFormat("%d watchpoints deleted.\n", count);
- result.SetStatus(eReturnStatusSuccessFinishNoResult);
-
return result.Succeeded();
}
-
-private:
- CommandOptions m_options;
};
// CommandObjectWatchpointIgnore