//===-- 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 &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 &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