diff options
Diffstat (limited to 'lldb/tools/lldb-vscode/LLDBUtils.cpp')
-rw-r--r-- | lldb/tools/lldb-vscode/LLDBUtils.cpp | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/lldb/tools/lldb-vscode/LLDBUtils.cpp b/lldb/tools/lldb-vscode/LLDBUtils.cpp new file mode 100644 index 00000000000..797eda09ccd --- /dev/null +++ b/lldb/tools/lldb-vscode/LLDBUtils.cpp @@ -0,0 +1,73 @@ +//===-- LLDBUtils.cpp -------------------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "LLDBUtils.h" +#include "VSCode.h" + +namespace lldb_vscode { + +void RunLLDBCommands(llvm::StringRef prefix, + const llvm::ArrayRef<std::string> &commands, + llvm::raw_ostream &strm) { + if (commands.empty()) + return; + lldb::SBCommandInterpreter interp = g_vsc.debugger.GetCommandInterpreter(); + if (!prefix.empty()) + strm << prefix << "\n"; + for (const auto &command : commands) { + lldb::SBCommandReturnObject result; + strm << "(lldb) " << command << "\n"; + interp.HandleCommand(command.c_str(), result); + auto output_len = result.GetOutputSize(); + if (output_len) { + const char *output = result.GetOutput(); + strm << output; + } + auto error_len = result.GetErrorSize(); + if (error_len) { + const char *error = result.GetError(); + strm << error; + } + } +} + +std::string RunLLDBCommands(llvm::StringRef prefix, + const llvm::ArrayRef<std::string> &commands) { + std::string s; + llvm::raw_string_ostream strm(s); + RunLLDBCommands(prefix, commands, strm); + strm.flush(); + return s; +} + +bool ThreadHasStopReason(lldb::SBThread &thread) { + switch (thread.GetStopReason()) { + case lldb::eStopReasonTrace: + case lldb::eStopReasonPlanComplete: + case lldb::eStopReasonBreakpoint: + case lldb::eStopReasonWatchpoint: + case lldb::eStopReasonInstrumentation: + case lldb::eStopReasonSignal: + case lldb::eStopReasonException: + case lldb::eStopReasonExec: + return true; + case lldb::eStopReasonThreadExiting: + case lldb::eStopReasonInvalid: + case lldb::eStopReasonNone: + break; + } + return false; +} + +int64_t MakeVSCodeFrameID(lldb::SBFrame &frame) { + return (int64_t)frame.GetThread().GetIndexID() << 32 | + (int64_t)frame.GetFrameID(); +} + +} // namespace lldb_vscode |