xref: /openbsd-src/gnu/llvm/lldb/tools/lldb-vscode/ExceptionBreakpoint.cpp (revision dda2819751e49c83612958492e38917049128b41)
1061da546Spatrick //===-- ExceptionBreakpoint.cpp ---------------------------------*- C++ -*-===//
2061da546Spatrick //
3061da546Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4061da546Spatrick // See https://llvm.org/LICENSE.txt for license information.
5061da546Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6061da546Spatrick //
7061da546Spatrick //===----------------------------------------------------------------------===//
8061da546Spatrick 
9061da546Spatrick #include "ExceptionBreakpoint.h"
10*dda28197Spatrick #include "BreakpointBase.h"
11061da546Spatrick #include "VSCode.h"
12061da546Spatrick 
13061da546Spatrick namespace lldb_vscode {
14061da546Spatrick 
SetBreakpoint()15061da546Spatrick void ExceptionBreakpoint::SetBreakpoint() {
16061da546Spatrick   if (bp.IsValid())
17061da546Spatrick     return;
18061da546Spatrick   bool catch_value = filter.find("_catch") != std::string::npos;
19061da546Spatrick   bool throw_value = filter.find("_throw") != std::string::npos;
20061da546Spatrick   bp = g_vsc.target.BreakpointCreateForException(language, catch_value,
21061da546Spatrick                                                  throw_value);
22*dda28197Spatrick   // See comments in BreakpointBase::GetBreakpointLabel() for details of why
23*dda28197Spatrick   // we add a label to our breakpoints.
24*dda28197Spatrick   bp.AddName(BreakpointBase::GetBreakpointLabel());
25061da546Spatrick }
26061da546Spatrick 
ClearBreakpoint()27061da546Spatrick void ExceptionBreakpoint::ClearBreakpoint() {
28061da546Spatrick   if (!bp.IsValid())
29061da546Spatrick     return;
30061da546Spatrick   g_vsc.target.BreakpointDelete(bp.GetID());
31061da546Spatrick   bp = lldb::SBBreakpoint();
32061da546Spatrick }
33061da546Spatrick 
34061da546Spatrick } // namespace lldb_vscode
35