A lot of comments in LLDB are surrounded by an ASCII line to delimit the begging and end of the comment. Its use is not really consistent across the code base, sometimes the lines are longer, sometimes they are shorter and sometimes they are omitted. Furthermore, it looks kind of weird with the 80 column limit, where the comment actually extends past the line, but not by much. Furthermore, when /// is used for Doxygen comments, it looks particularly odd. And when // is used, it incorrectly gives the impression that it's actually a Doxygen comment. I assume these lines were added to improve distinguishing between comments and code. However, given that todays editors and IDEs do a great job at highlighting comments, I think it's worth to drop this for the sake of consistency. The alternative is fixing all the inconsistencies, which would create a lot more churn. Differential revision: https://reviews.llvm.org/D60508 llvm-svn: 358135
152 lines
5.2 KiB
C++
152 lines
5.2 KiB
C++
//===-- LLDBUtils.h ---------------------------------------------*- C++ -*-===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLDBVSCODE_LLDBUTILS_H_
|
|
#define LLDBVSCODE_LLDBUTILS_H_
|
|
|
|
#include "VSCodeForward.h"
|
|
#include "llvm/ADT/ArrayRef.h"
|
|
#include "llvm/ADT/StringRef.h"
|
|
#include "llvm/Support/raw_ostream.h"
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
namespace lldb_vscode {
|
|
|
|
/// Run a list of LLDB commands in the LLDB command interpreter.
|
|
///
|
|
/// All output from every command, including the prompt + the command
|
|
/// is placed into the "strm" argument.
|
|
///
|
|
/// \param[in] prefix
|
|
/// A string that will be printed into \a strm prior to emitting
|
|
/// the prompt + command and command output. Can be NULL.
|
|
///
|
|
/// \param[in] commands
|
|
/// An array of LLDB commands to execute.
|
|
///
|
|
/// \param[in] strm
|
|
/// The stream that will receive the prefix, prompt + command and
|
|
/// all command output.
|
|
void RunLLDBCommands(llvm::StringRef prefix,
|
|
const llvm::ArrayRef<std::string> &commands,
|
|
llvm::raw_ostream &strm);
|
|
|
|
/// Run a list of LLDB commands in the LLDB command interpreter.
|
|
///
|
|
/// All output from every command, including the prompt + the command
|
|
/// is returned in the std::string return value.
|
|
///
|
|
/// \param[in] prefix
|
|
/// A string that will be printed into \a strm prior to emitting
|
|
/// the prompt + command and command output. Can be NULL.
|
|
///
|
|
/// \param[in] commands
|
|
/// An array of LLDB commands to execute.
|
|
///
|
|
/// \return
|
|
/// A std::string that contains the prefix and all commands and
|
|
/// command output
|
|
std::string RunLLDBCommands(llvm::StringRef prefix,
|
|
const llvm::ArrayRef<std::string> &commands);
|
|
|
|
/// Check if a thread has a stop reason.
|
|
///
|
|
/// \param[in] thread
|
|
/// The LLDB thread object to check
|
|
///
|
|
/// \return
|
|
/// \b True if the thread has a valid stop reason, \b false
|
|
/// otherwise.
|
|
bool ThreadHasStopReason(lldb::SBThread &thread);
|
|
|
|
/// Given a LLDB frame, make a frame ID that is unique to a specific
|
|
/// thread and frame.
|
|
///
|
|
/// VSCode requires a Stackframe "id" to be unique, so we use the frame
|
|
/// index in the lower 32 bits and the thread index ID in the upper 32
|
|
/// bits.
|
|
///
|
|
/// \param[in] frame
|
|
/// The LLDB stack frame object generate the ID for
|
|
///
|
|
/// \return
|
|
/// A unique integer that allows us to easily find the right
|
|
/// stack frame within a thread on subsequent VS code requests.
|
|
int64_t MakeVSCodeFrameID(lldb::SBFrame &frame);
|
|
|
|
/// Given a VSCode frame ID, convert to a LLDB thread index id.
|
|
///
|
|
/// VSCode requires a Stackframe "id" to be unique, so we use the frame
|
|
/// index in the lower THREAD_INDEX_SHIFT bits and the thread index ID in
|
|
/// the upper 32 - THREAD_INDEX_SHIFT bits.
|
|
///
|
|
/// \param[in] dap_frame_id
|
|
/// The VSCode frame ID to convert to a thread index ID.
|
|
///
|
|
/// \return
|
|
/// The LLDB thread index ID.
|
|
uint32_t GetLLDBThreadIndexID(uint64_t dap_frame_id);
|
|
|
|
/// Given a VSCode frame ID, convert to a LLDB frame ID.
|
|
///
|
|
/// VSCode requires a Stackframe "id" to be unique, so we use the frame
|
|
/// index in the lower THREAD_INDEX_SHIFT bits and the thread index ID in
|
|
/// the upper 32 - THREAD_INDEX_SHIFT bits.
|
|
///
|
|
/// \param[in] dap_frame_id
|
|
/// The VSCode frame ID to convert to a frame ID.
|
|
///
|
|
/// \return
|
|
/// The LLDB frame index ID.
|
|
uint32_t GetLLDBFrameID(uint64_t dap_frame_id);
|
|
|
|
/// Given a LLDB breakpoint, make a breakpoint ID that is unique to a
|
|
/// specific breakpoint and breakpoint location.
|
|
///
|
|
/// VSCode requires a Breakpoint "id" to be unique, so we use the
|
|
/// breakpoint ID in the lower BREAKPOINT_ID_SHIFT bits and the
|
|
/// breakpoint location ID in the upper BREAKPOINT_ID_SHIFT bits.
|
|
///
|
|
/// \param[in] frame
|
|
/// The LLDB stack frame object generate the ID for
|
|
///
|
|
/// \return
|
|
/// A unique integer that allows us to easily find the right
|
|
/// stack frame within a thread on subsequent VS code requests.
|
|
int64_t MakeVSCodeBreakpointID(lldb::SBBreakpointLocation &bp_loc);
|
|
|
|
/// Given a VSCode breakpoint ID, convert to a LLDB breakpoint ID.
|
|
///
|
|
/// VSCode requires a Breakpoint "id" to be unique, so we use the
|
|
/// breakpoint ID in the lower BREAKPOINT_ID_SHIFT bits and the
|
|
/// breakpoint location ID in the upper BREAKPOINT_ID_SHIFT bits.
|
|
///
|
|
/// \param[in] dap_breakpoint_id
|
|
/// The VSCode breakpoint ID to convert to an LLDB breakpoint ID.
|
|
///
|
|
/// \return
|
|
/// The LLDB breakpoint ID.
|
|
uint32_t GetLLDBBreakpointID(uint64_t dap_breakpoint_id);
|
|
|
|
/// Given a VSCode breakpoint ID, convert to a LLDB breakpoint location ID.
|
|
///
|
|
/// VSCode requires a Breakpoint "id" to be unique, so we use the
|
|
/// breakpoint ID in the lower BREAKPOINT_ID_SHIFT bits and the
|
|
/// breakpoint location ID in the upper BREAKPOINT_ID_SHIFT bits.
|
|
///
|
|
/// \param[in] dap_breakpoint_id
|
|
/// The VSCode frame ID to convert to a breakpoint location ID.
|
|
///
|
|
/// \return
|
|
/// The LLDB breakpoint location ID.
|
|
uint32_t GetLLDBBreakpointLocationID(uint64_t dap_breakpoint_id);
|
|
} // namespace lldb_vscode
|
|
|
|
#endif
|