33#include "llvm/BinaryFormat/Magic.h"
34#include "llvm/Support/MemoryBuffer.h"
35#include "llvm/Support/Threading.h"
45using namespace minidump;
73void HashElfTextSection(
ModuleSP module_sp, std::vector<uint8_t> &breakpad_uuid,
74 std::vector<uint8_t> &facebook_uuid) {
75 SectionList *sect_list = module_sp->GetSectionList();
76 if (sect_list ==
nullptr)
81 constexpr size_t kMDGUIDSize = 16;
82 constexpr size_t kBreakpadPageSize = 4096;
87 const size_t text_size = sect_sp->GetFileSize();
88 const size_t read_size = std::min<size_t>(
89 llvm::alignTo(text_size, kMDGUIDSize), kBreakpadPageSize);
90 sect_sp->GetObjectFile()->GetData(sect_sp->GetFileOffset(), read_size, data);
92 breakpad_uuid.assign(kMDGUIDSize, 0);
93 facebook_uuid.assign(kMDGUIDSize, 0);
98 for (
size_t i = 0; i < kMDGUIDSize; i++)
99 facebook_uuid[i] ^= text_size % 255;
107 while (ptr < ptr_end) {
108 for (
unsigned i = 0; i < kMDGUIDSize; i++) {
109 breakpad_uuid[i] ^= ptr[i];
110 facebook_uuid[i] ^= ptr[i];
119 return "Minidump plug-in.";
126 if (!crash_file || can_connect)
131 constexpr size_t header_size =
sizeof(Header);
137 lldbassert(DataPtr->GetByteSize() == header_size);
138 if (identify_magic(toStringRef(DataPtr->GetData())) != llvm::file_magic::minidump)
146 return std::make_shared<ProcessMinidump>(target_sp, listener_sp, *crash_file,
151 bool plugin_specified_by_name) {
160 m_core_data(std::move(core_data)), m_active_exception(nullptr),
173 static llvm::once_flag g_once_flag;
175 llvm::call_once(g_once_flag, []() {
188 if (!expected_parser)
189 return Status(expected_parser.takeError());
197 case llvm::Triple::x86:
198 case llvm::Triple::x86_64:
199 case llvm::Triple::arm:
200 case llvm::Triple::aarch64:
205 error.SetErrorStringWithFormat(
"unsupported minidump architecture: %s",
222 "setting process ID to 1",
238 constexpr uint32_t BreakpadDumpRequested = 0xFFFFFFFF;
240 BreakpadDumpRequested) {
260 if (arch.
GetTriple().getOS() == llvm::Triple::Linux) {
269 *stop_thread, signo);
270 }
else if (arch.
GetTriple().getVendor() == llvm::Triple::Apple) {
277 llvm::raw_string_ostream desc_stream(desc);
278 desc_stream <<
"Exception "
281 <<
" encountered at address "
285 *stop_thread, desc_stream.str().c_str());
288 stop_thread->SetStopInfo(stop_info);
307 error.SetErrorString(
"could not parse memory info");
311 std::memcpy(buf, mem.data(), mem.size());
321 triple.setVendor(llvm::Triple::VendorType::UnknownVendor);
322 triple.setArch(llvm::Triple::ArchType::x86);
323 triple.setOS(llvm::Triple::OSType::Win32);
342 SectionList *sections = module_sp->GetSectionList();
343 for (
size_t i = 0; i < sections->
GetSize(); ++i) {
349 section_sp->GetByteSize());
355 to_add.emplace_back();
356 to_add.back().GetRange() = section_range;
357 to_add.back().SetLLDBPermissions(section_sp->GetPermissions());
359 to_add.back().SetName(module_sp->GetFileSpec().GetPath().c_str());
387 LocationDescriptor context_location = thread.Context;
395 llvm::ArrayRef<uint8_t> context;
404 return new_thread_list.
GetSize(
false) > 0;
408 llvm::StringRef name,
419 const auto dmp_bytes = minidump_uuid.
GetBytes();
420 const auto mod_bytes = module_sp->GetUUID().GetBytes();
421 const bool match = dmp_bytes.empty() || mod_bytes.empty() ||
422 mod_bytes.take_front(dmp_bytes.size()) == dmp_bytes;
424 LLDB_LOG(log,
"Partial uuid match for {0}.", name);
435 std::vector<uint8_t> breakpad_uuid;
436 std::vector<uint8_t> facebook_uuid;
437 HashElfTextSection(module_sp, breakpad_uuid, facebook_uuid);
438 if (dmp_bytes == llvm::ArrayRef<uint8_t>(breakpad_uuid)) {
439 LLDB_LOG(log,
"Breakpad .text hash match for {0}.", name);
442 if (dmp_bytes == llvm::ArrayRef<uint8_t>(facebook_uuid)) {
443 LLDB_LOG(log,
"Facebook .text hash match for {0}.", name);
455 std::vector<const minidump::Module *> filtered_modules =
460 for (
auto module : filtered_modules) {
462 module->ModuleNameRVA));
463 const uint64_t load_addr = module->BaseOfImage;
464 const uint64_t load_size = module->SizeOfImage;
465 LLDB_LOG(log,
"found module: name: {0} {1:x10}-{2:x10} size: {3}", name,
466 load_addr, load_addr + load_size, load_size);
470 if (llvm::StringRef(name).ends_with_insensitive(
"wow64.dll")) {
484 LLDB_LOG(log,
"Full uuid match for {0}.", name);
505 auto *objfile = module_sp->GetObjectFile();
507 objfile->GetPluginName() ==
523 "Unable to locate the matching object file, creating a "
524 "placeholder module for: {0}",
527 module_sp = Module::CreateModuleFromObjectFile<ObjectFilePlaceholder>(
528 module_spec, load_addr, load_size);
532 bool load_addr_changed =
false;
533 module_sp->SetLoadAddress(
GetTarget(), load_addr,
false,
544 const bool add_exe_file_as_first_arg =
false;
546 add_exe_file_as_first_arg);
562#define INIT_BOOL(VAR, LONG, SHORT, DESC) \
563 VAR(LLDB_OPT_SET_1, false, LONG, SHORT, DESC, false, true)
564#define APPEND_OPT(VAR) \
565 m_option_group.Append(&VAR, LLDB_OPT_SET_ALL, LLDB_OPT_SET_1)
637 return DumpLinux() ||
641 return DumpLinux() ||
645 return DumpLinux() ||
649 return DumpLinux() ||
653 return DumpLinux() ||
657 return DumpLinux() ||
661 return DumpLinux() ||
665 return DumpLinux() ||
669 return DumpLinux() ||
673 return DumpLinux() ||
715 "Dump information from the minidump file.", nullptr),
718 "Dump the everything in the minidump."),
719 INIT_BOOL(m_dump_directory,
"directory",
'd',
720 "Dump the minidump directory map."),
721 INIT_BOOL(m_dump_linux_cpuinfo,
"cpuinfo",
'C',
722 "Dump linux /proc/cpuinfo."),
723 INIT_BOOL(m_dump_linux_proc_status,
"status",
's',
724 "Dump linux /proc/<pid>/status."),
725 INIT_BOOL(m_dump_linux_lsb_release,
"lsb-release",
'r',
726 "Dump linux /etc/lsb-release."),
727 INIT_BOOL(m_dump_linux_cmdline,
"cmdline",
'c',
728 "Dump linux /proc/<pid>/cmdline."),
729 INIT_BOOL(m_dump_linux_environ,
"environ",
'e',
730 "Dump linux /proc/<pid>/environ."),
731 INIT_BOOL(m_dump_linux_auxv,
"auxv",
'x',
732 "Dump linux /proc/<pid>/auxv."),
733 INIT_BOOL(m_dump_linux_maps,
"maps",
'm',
734 "Dump linux /proc/<pid>/maps."),
735 INIT_BOOL(m_dump_linux_proc_stat,
"stat",
'S',
736 "Dump linux /proc/<pid>/stat."),
737 INIT_BOOL(m_dump_linux_proc_uptime,
"uptime",
'u',
738 "Dump linux process uptime."),
739 INIT_BOOL(m_dump_linux_proc_fd,
"fd",
'f',
740 "Dump linux /proc/<pid>/fd."),
741 INIT_BOOL(m_dump_linux_all,
"linux",
'l',
742 "Dump all linux streams."),
743 INIT_BOOL(m_fb_app_data,
"fb-app-data", 1,
744 "Dump Facebook application custom data."),
745 INIT_BOOL(m_fb_build_id,
"fb-build-id", 2,
746 "Dump the Facebook build ID."),
748 "Dump Facebook application version string."),
749 INIT_BOOL(m_fb_java_stack,
"fb-java-stack", 4,
750 "Dump Facebook java stack."),
751 INIT_BOOL(m_fb_dalvik,
"fb-dalvik-info", 5,
752 "Dump Facebook Dalvik info."),
753 INIT_BOOL(m_fb_unwind,
"fb-unwind-symbols", 6,
754 "Dump Facebook unwind symbols."),
755 INIT_BOOL(m_fb_error_log,
"fb-error-log", 7,
756 "Dump Facebook error log."),
757 INIT_BOOL(m_fb_app_state,
"fb-app-state-log", 8,
758 "Dump Facebook java stack."),
759 INIT_BOOL(m_fb_abort,
"fb-abort-reason", 9,
760 "Dump Facebook abort reason."),
761 INIT_BOOL(m_fb_thread,
"fb-thread-name", 10,
762 "Dump Facebook thread name."),
764 "Dump Facebook logcat."),
765 INIT_BOOL(m_fb_all,
"facebook", 12,
"Dump all Facebook streams.") {
805 SetDefaultOptionsIfNoneAreSet();
808 m_interpreter.GetExecutionContext().GetProcessPtr());
813 s.
Printf(
"RVA SIZE TYPE StreamType\n");
814 s.
Printf(
"---------- ---------- ---------- --------------------------\n");
817 "0x%8.8x 0x%8.8x 0x%8.8x %s\n", (uint32_t)stream_desc.Location.RVA,
818 (uint32_t)stream_desc.Location.DataSize,
819 (
unsigned)(StreamType)stream_desc.Type,
823 auto DumpTextStream = [&](StreamType stream_type,
824 llvm::StringRef label) ->
void {
825 auto bytes = minidump.
GetStream(stream_type);
826 if (!bytes.empty()) {
829 s.
Printf(
"%s:\n%s\n\n", label.data(), bytes.data());
832 auto DumpBinaryStream = [&](StreamType stream_type,
833 llvm::StringRef label) ->
void {
834 auto bytes = minidump.
GetStream(stream_type);
835 if (!bytes.empty()) {
838 s.
Printf(
"%s:\n", label.data());
842 bytes.size(), 16, 0, 0, 0);
847 if (DumpLinuxCPUInfo())
848 DumpTextStream(StreamType::LinuxCPUInfo,
"/proc/cpuinfo");
849 if (DumpLinuxProcStatus())
850 DumpTextStream(StreamType::LinuxProcStatus,
"/proc/PID/status");
851 if (DumpLinuxLSBRelease())
852 DumpTextStream(StreamType::LinuxLSBRelease,
"/etc/lsb-release");
853 if (DumpLinuxCMDLine())
854 DumpTextStream(StreamType::LinuxCMDLine,
"/proc/PID/cmdline");
855 if (DumpLinuxEnviron())
856 DumpTextStream(StreamType::LinuxEnviron,
"/proc/PID/environ");
858 DumpBinaryStream(StreamType::LinuxAuxv,
"/proc/PID/auxv");
860 DumpTextStream(StreamType::LinuxMaps,
"/proc/PID/maps");
861 if (DumpLinuxProcStat())
862 DumpTextStream(StreamType::LinuxProcStat,
"/proc/PID/stat");
863 if (DumpLinuxProcUptime())
864 DumpTextStream(StreamType::LinuxProcUptime,
"uptime");
865 if (DumpLinuxProcFD())
866 DumpTextStream(StreamType::LinuxProcFD,
"/proc/PID/fd");
867 if (DumpFacebookAppData())
868 DumpTextStream(StreamType::FacebookAppCustomData,
869 "Facebook App Data");
870 if (DumpFacebookBuildID()) {
871 auto bytes = minidump.
GetStream(StreamType::FacebookBuildID);
872 if (bytes.size() >= 4) {
876 uint32_t build_id = data.
GetU32(&offset);
877 s.
Printf(
"Facebook Build ID:\n");
878 s.
Printf(
"%u\n", build_id);
882 if (DumpFacebookVersionName())
883 DumpTextStream(StreamType::FacebookAppVersionName,
884 "Facebook Version String");
885 if (DumpFacebookJavaStack())
886 DumpTextStream(StreamType::FacebookJavaStack,
887 "Facebook Java Stack");
888 if (DumpFacebookDalvikInfo())
889 DumpTextStream(StreamType::FacebookDalvikInfo,
890 "Facebook Dalvik Info");
891 if (DumpFacebookUnwindSymbols())
892 DumpBinaryStream(StreamType::FacebookUnwindSymbols,
893 "Facebook Unwind Symbols Bytes");
894 if (DumpFacebookErrorLog())
895 DumpTextStream(StreamType::FacebookDumpErrorLog,
896 "Facebook Error Log");
897 if (DumpFacebookAppStateLog())
898 DumpTextStream(StreamType::FacebookAppStateLog,
899 "Faceook Application State Log");
900 if (DumpFacebookAbortReason())
901 DumpTextStream(StreamType::FacebookAbortReason,
902 "Facebook Abort Reason");
903 if (DumpFacebookThreadName())
904 DumpTextStream(StreamType::FacebookThreadName,
905 "Facebook Thread Name");
906 if (DumpFacebookLogcat())
907 DumpTextStream(StreamType::FacebookLogcat,
"Facebook Logcat");
915 "Commands for operating on a ProcessMinidump process.",
916 "process plugin <subcommand> [<subcommand-options>]") {
917 LoadSubCommand(
"dump",
926 m_command_sp = std::make_shared<CommandObjectMultiwordProcessMinidump>(
927 GetTarget().GetDebugger().GetCommandInterpreter());
static void DumpDirectory(Stream &strm, const FileSpec *file_spec_ptr, uint32_t width)
static llvm::raw_ostream & error(Stream &strm)
#define LLDB_LOG(log,...)
The LLDB_LOG* macros defined below are the way to emit log messages.
#define LLDB_PLUGIN_DEFINE(PluginName)
#define INIT_BOOL(VAR, LONG, SHORT, DESC)
CommandObjectMultiwordProcessMinidump(CommandInterpreter &interpreter)
~CommandObjectMultiwordProcessMinidump() override=default
bool DumpLinuxCMDLine() const
OptionGroupBoolean m_dump_linux_all
bool DumpFacebookAbortReason() const
bool DumpLinuxProcFD() const
OptionGroupBoolean m_fb_java_stack
bool DumpLinuxProcStatus() const
bool DumpLinuxProcStat() const
OptionGroupBoolean m_dump_directory
bool DumpFacebookAppData() const
bool DumpLinuxAuxv() const
Options * GetOptions() override
OptionGroupOptions m_option_group
OptionGroupBoolean m_fb_thread
bool DumpDirectory() const
OptionGroupBoolean m_dump_linux_lsb_release
bool DumpFacebookLogcat() const
OptionGroupBoolean m_fb_dalvik
bool DumpFacebookUnwindSymbols() const
OptionGroupBoolean m_fb_app_data
OptionGroupBoolean m_fb_logcat
OptionGroupBoolean m_dump_linux_cmdline
bool DumpFacebookBuildID() const
OptionGroupBoolean m_dump_linux_environ
OptionGroupBoolean m_dump_linux_proc_uptime
bool DumpLinuxLSBRelease() const
OptionGroupBoolean m_dump_linux_proc_stat
OptionGroupBoolean m_dump_all
OptionGroupBoolean m_dump_linux_maps
OptionGroupBoolean m_fb_app_state
OptionGroupBoolean m_fb_abort
bool DumpFacebookDalvikInfo() const
OptionGroupBoolean m_fb_build_id
OptionGroupBoolean m_dump_linux_proc_status
OptionGroupBoolean m_dump_linux_proc_fd
bool DumpLinuxMaps() const
CommandObjectProcessMinidumpDump(CommandInterpreter &interpreter)
bool DumpFacebookAppStateLog() const
bool DumpFacebook() const
OptionGroupBoolean m_dump_linux_cpuinfo
bool DumpLinuxCPUInfo() const
bool DumpFacebookThreadName() const
OptionGroupBoolean m_fb_error_log
bool DumpFacebookErrorLog() const
bool DumpFacebookVersionName() const
OptionGroupBoolean m_dump_linux_auxv
bool DumpLinuxEnviron() const
OptionGroupBoolean m_fb_version
bool DumpLinuxProcUptime() const
void SetDefaultOptionsIfNoneAreSet()
~CommandObjectProcessMinidumpDump() override=default
OptionGroupBoolean m_fb_all
OptionGroupBoolean m_fb_unwind
void DoExecute(Args &command, CommandReturnObject &result) override
bool DumpFacebookJavaStack() const
A minimal ObjectFile implementation providing a dummy object file for the cases when the real module ...
static llvm::StringRef GetPluginNameStatic()
An architecture specification class.
llvm::Triple & GetTriple()
Architecture triple accessor.
llvm::Triple::ArchType GetMachine() const
Returns a machine family for the current architecture.
const char * GetArchitectureName() const
Returns a static string representing the current architecture.
A command line argument class.
size_t GetArgumentCount() const
Gets the number of arguments left in this command object.
void SetStatus(lldb::ReturnStatus status)
void AppendErrorWithFormat(const char *format,...) __attribute__((format(printf
Stream & GetOutputStream()
A uniqued constant string class.
static void ReportWarning(std::string message, std::optional< lldb::user_id_t > debugger_id=std::nullopt, std::once_flag *once=nullptr)
Report warning events.
void ClearDirectory()
Clear the directory in this object.
size_t GetPath(char *path, size_t max_path_length, bool denormalize=true) const
Extract the full path to the file.
static FileSystem & Instance()
std::shared_ptr< DataBuffer > CreateDataBuffer(const llvm::Twine &path, uint64_t size=0, uint64_t offset=0)
Create memory buffer from path.
Class used by the Process to hold a list of its JITLoaders.
OptionalBool GetMapped() const
A collection class for Module objects.
void ForEach(std::function< bool(const lldb::ModuleSP &module_sp)> const &callback) const
Applies 'callback' to each module in this ModuleList.
bool Remove(const lldb::ModuleSP &module_sp, bool notify=true)
Remove a module from the module list.
void Append(const lldb::ModuleSP &module_sp, bool notify=true)
Append a module to the module list.
ArchSpec & GetArchitecture()
OptionValueBoolean & GetOptionValue()
void SetCurrentValue(bool value)
bool GetCurrentValue() const
A command line option parsing protocol class.
static bool RegisterPlugin(llvm::StringRef name, llvm::StringRef description, ABICreateInstance create_callback)
static bool UnregisterPlugin(ABICreateInstance create_callback)
Base class for all processes that don't represent a live process, such as coredumps or processes trac...
void SetExecutableFile(const FileSpec &exe_file, bool add_exe_file_as_first_arg)
void SetArchitecture(const ArchSpec &arch)
void SetProcessID(lldb::pid_t pid)
lldb::pid_t GetID() const
Returns the pid of the process or LLDB_INVALID_PROCESS_ID if there is no known pid.
lldb::JITLoaderListUP m_jit_loaders_up
void SetUnixSignals(lldb::UnixSignalsSP &&signals_sp)
void SetID(lldb::pid_t new_pid)
Sets the stored pid.
uint32_t GetAddressByteSize() const
virtual void Finalize(bool destructing)
This object is about to be destroyed, do any necessary cleanup.
ThreadList m_thread_list
The threads for this process as the user will see them.
Target & GetTarget()
Get the target object pointer for this module.
lldb::SectionSP FindSectionByName(ConstString section_dstr) const
lldb::SectionSP GetSectionAtIndex(size_t idx) const
lldb::addr_t GetSectionLoadAddress(const lldb::SectionSP §ion_sp) const
static lldb::StopInfoSP CreateStopReasonWithMachException(Thread &thread, uint32_t exc_type, uint32_t exc_data_count, uint64_t exc_code, uint64_t exc_sub_code, uint64_t exc_sub_sub_code, bool pc_already_adjusted=true, bool adjust_pc_if_needed=false)
static lldb::StopInfoSP CreateStopReasonWithSignal(Thread &thread, int signo, const char *description=nullptr, std::optional< int > code=std::nullopt)
static lldb::StopInfoSP CreateStopReasonWithException(Thread &thread, const char *description)
A stream class that can stream formatted output to a file.
size_t Printf(const char *format,...) __attribute__((format(printf
Output printf formatted output to the stream.
SectionLoadList & GetSectionLoadList()
lldb::ModuleSP GetOrCreateModule(const ModuleSpec &module_spec, bool notify, Status *error_ptr=nullptr)
Find a binary on the system and return its Module, or return an existing Module that is already in th...
bool SetArchitecture(const ArchSpec &arch_spec, bool set_platform=false, bool merge=true)
Set the architecture for this target.
lldb::ModuleSP GetExecutableModule()
Gets the module for the main executable.
const ModuleList & GetImages() const
Get accessor for the images for this process.
bool MergeArchitecture(const ArchSpec &arch_spec)
void AddThread(const lldb::ThreadSP &thread_sp)
lldb::ThreadSP GetSelectedThread()
uint32_t GetSize(bool can_update=true)
bool SetSelectedThreadByID(lldb::tid_t tid, bool notify=false)
llvm::ArrayRef< uint8_t > GetBytes() const
static lldb::UnixSignalsSP Create(const ArchSpec &arch)
llvm::object::MinidumpFile & GetMinidumpFile()
static MemoryRegionInfo GetMemoryRegionInfo(const MemoryRegionInfos ®ions, lldb::addr_t load_addr)
llvm::ArrayRef< uint8_t > GetStream(StreamType stream_type)
static llvm::Expected< MinidumpParser > Create(const lldb::DataBufferSP &data_buf_sp)
static llvm::StringRef GetStreamTypeAsString(StreamType stream_type)
void BuildMemoryRegions()
bool DoUpdateThreadList(ThreadList &old_thread_list, ThreadList &new_thread_list) override
Update the thread list following process plug-in's specific logic.
const minidump::ExceptionStream * m_active_exception
~ProcessMinidump() override
lldb::DataBufferSP m_core_data
bool GetProcessInfo(ProcessInstanceInfo &info) override
static llvm::StringRef GetPluginNameStatic()
ProcessMinidump(lldb::TargetSP target_sp, lldb::ListenerSP listener_sp, const FileSpec &core_file, lldb::DataBufferSP code_data)
bool IsAlive() override
Check if a process is still alive.
lldb::ModuleSP GetOrCreateModule(lldb_private::UUID minidump_uuid, llvm::StringRef name, lldb_private::ModuleSpec module_spec)
size_t DoReadMemory(lldb::addr_t addr, void *buf, size_t size, Status &error) override
Actually do the reading of memory from a process.
lldb::CommandObjectSP m_command_sp
ArchSpec GetArchitecture()
CommandObject * GetPluginCommandObject() override
Return a multi-word command object that can be used to expose plug-in specific commands.
Status GetMemoryRegions(lldb_private::MemoryRegionInfos ®ion_list) override
Obtain all the mapped memory regions within this process.
Status DoDestroy() override
std::optional< MemoryRegionInfos > m_memory_regions
static llvm::StringRef GetPluginDescriptionStatic()
static lldb::ProcessSP CreateInstance(lldb::TargetSP target_sp, lldb::ListenerSP listener_sp, const FileSpec *crash_file_path, bool can_connect)
bool WarnBeforeDetach() const override
Before lldb detaches from a process, it warns the user that they are about to lose their debug sessio...
llvm::ArrayRef< minidump::Thread > m_thread_list
bool CanDebug(lldb::TargetSP target_sp, bool plugin_specified_by_name) override
Check if a plug-in instance can debug the file in module.
Status DoLoadCore() override
Status DoGetMemoryRegionInfo(lldb::addr_t load_addr, MemoryRegionInfo &range_info) override
DoGetMemoryRegionInfo is called by GetMemoryRegionInfo after it has removed non address bits from loa...
void RefreshStateAfterStop() override
Currently called as part of ShouldStop.
std::optional< MinidumpParser > m_minidump_parser
size_t ReadMemory(lldb::addr_t addr, void *buf, size_t size, Status &error) override
Read of memory from a process.
JITLoaderList & GetJITLoaders() override
#define LLDB_INVALID_ADDRESS
A class that represents a running process on the host machine.
Log * GetLog(Cat mask)
Retrieve the Log object for the channel associated with the given log enum.
lldb::offset_t DumpDataExtractor(const DataExtractor &DE, Stream *s, lldb::offset_t offset, lldb::Format item_format, size_t item_byte_size, size_t item_count, size_t num_per_line, uint64_t base_addr, uint32_t item_bit_size, uint32_t item_bit_offset, ExecutionContextScope *exe_scope=nullptr, bool show_memory_tags=false)
Dumps item_count objects into the stream s.
std::shared_ptr< lldb_private::Thread > ThreadSP
std::shared_ptr< lldb_private::CommandObject > CommandObjectSP
std::shared_ptr< lldb_private::Process > ProcessSP
@ eReturnStatusSuccessFinishResult
std::shared_ptr< lldb_private::Listener > ListenerSP
std::shared_ptr< lldb_private::DataBuffer > DataBufferSP
std::shared_ptr< lldb_private::StopInfo > StopInfoSP
std::shared_ptr< lldb_private::Section > SectionSP
std::shared_ptr< lldb_private::Target > TargetSP
std::shared_ptr< lldb_private::Module > ModuleSP
BaseType GetRangeBase() const
BaseType GetRangeEnd() const