blob: 0dc946d0077d54dff5c8c99bfb0de5a2a82a6965 [file] [log] [blame]
// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "src/developer/debug/zxdb/console/commands/verb_disable.h"
#include "src/developer/debug/zxdb/client/breakpoint.h"
#include "src/developer/debug/zxdb/client/breakpoint_settings.h"
#include "src/developer/debug/zxdb/console/command.h"
#include "src/developer/debug/zxdb/console/command_utils.h"
#include "src/developer/debug/zxdb/console/console.h"
#include "src/developer/debug/zxdb/console/input_location_parser.h"
#include "src/developer/debug/zxdb/console/output_buffer.h"
#include "src/developer/debug/zxdb/console/verbs.h"
namespace zxdb {
namespace {
const char kDisableShortHelp[] = "disable: Disable a breakpoint.";
const char kDisableHelp[] =
R"(disable [ <location> ]
By default, "disable" will disable the current active breakpoint. It is the
opposite of "enable". It can be combined with an explicit breakpoint prefix
to indicate a specific breakpoint to disable.
In this way, it is an alias for:
bp set enabled = false
If a location is given, the command will instead disable all breakpoints at
that location. Note that the comparison is performed based on input rather
than actual address, so "disable main" will not disable breakpoints on
"$main".
Location arguments
)" LOCATION_ARG_HELP("disable")
R"(
See also
"help break": To create breakpoints.
"help breakpoint": To manage the current breakpoint context.
"help enable": To enable breakpoints.
Examples
breakpoint 2 disable
bp 2 disable
Disable a specific breakpoint.
disable
Disable the current breakpoint.
)";
Err RunVerbDisable(ConsoleContext* context, const Command& cmd) {
std::vector<Breakpoint*> breakpoints;
if (Err err = ResolveBreakpointsForModification(cmd, "disable", &breakpoints); err.has_error())
return err;
for (Breakpoint* breakpoint : breakpoints) {
BreakpointSettings settings = breakpoint->GetSettings();
settings.enabled = false;
breakpoint->SetSettings(settings);
OutputBuffer out("Disabled ");
out.Append(FormatBreakpoint(context, breakpoint, true));
Console::get()->Output(out);
}
return Err();
}
} // namespace
VerbRecord GetDisableVerbRecord() {
return VerbRecord(&RunVerbDisable, {"disable"}, kDisableShortHelp, kDisableHelp,
CommandGroup::kBreakpoint);
}
} // namespace zxdb