35#include "llvm/BinaryFormat/Magic.h"
36#include "llvm/Support/MemoryBuffer.h"
75void HashElfTextSection(
ModuleSP module_sp, std::vector<uint8_t> &breakpad_uuid,
76 std::vector<uint8_t> &facebook_uuid) {
77 SectionList *sect_list = module_sp->GetSectionList();
78 if (sect_list ==
nullptr)
83 constexpr size_t kMDGUIDSize = 16;
84 constexpr size_t kBreakpadPageSize = 4096;
89 const size_t text_size = sect_sp->GetFileSize();
90 const size_t read_size = std::min<size_t>(
91 llvm::alignTo(text_size, kMDGUIDSize), kBreakpadPageSize);
92 sect_sp->GetObjectFile()->GetData(sect_sp->GetFileOffset(), read_size,
95 breakpad_uuid.assign(kMDGUIDSize, 0);
96 facebook_uuid.assign(kMDGUIDSize, 0);
101 for (
size_t i = 0; i < kMDGUIDSize; i++)
102 facebook_uuid[i] ^= text_size % 255;
108 const uint8_t *ptr = extractor_sp->GetDataStart();
109 const uint8_t *ptr_end = extractor_sp->GetDataEnd();
110 while (ptr < ptr_end) {
111 for (
unsigned i = 0; i < kMDGUIDSize; i++) {
112 breakpad_uuid[i] ^= ptr[i];
113 facebook_uuid[i] ^= ptr[i];
122 return "Minidump plug-in.";
129 if (!crash_file || can_connect)
134 constexpr size_t header_size =
sizeof(Header);
140 lldbassert(DataPtr->GetByteSize() == header_size);
141 if (identify_magic(toStringRef(DataPtr->GetData())) != llvm::file_magic::minidump)
149 return std::make_shared<ProcessMinidump>(target_sp, listener_sp, *crash_file,
154 bool plugin_specified_by_name) {
186 if (!expected_parser)
195 case llvm::Triple::x86:
196 case llvm::Triple::x86_64:
197 case llvm::Triple::arm:
198 case llvm::Triple::aarch64:
211 for (
auto exception_stream : exception_stream_it) {
214 if (!exception_stream)
218 .try_emplace(exception_stream->ThreadId, exception_stream.get())
221 "Duplicate exception stream for tid {0}", exception_stream->ThreadId);
233 "setting process ID to 1",
247 constexpr uint32_t BreakpadDumpRequested = 0xFFFFFFFF;
248 if (exception_stream.ExceptionRecord.ExceptionCode ==
249 BreakpadDumpRequested) {
269 if (arch.
GetTriple().getOS() == llvm::Triple::Linux) {
270 uint32_t signo = exception_stream.ExceptionRecord.ExceptionCode;
275 const char *description =
nullptr;
276 if (exception_stream.ExceptionRecord.ExceptionFlags ==
277 llvm::minidump::Exception::LLDB_FLAG)
278 description =
reinterpret_cast<const char *
>(
279 exception_stream.ExceptionRecord.ExceptionInformation);
281 llvm::StringRef description_str(description,
282 Exception::MaxParameterBytes);
284 *stop_thread, signo, description_str.str().c_str());
285 }
else if (arch.
GetTriple().getVendor() == llvm::Triple::Apple) {
287 *stop_thread, exception_stream.ExceptionRecord.ExceptionCode, 2,
288 exception_stream.ExceptionRecord.ExceptionFlags,
289 exception_stream.ExceptionRecord.ExceptionAddress, 0);
292 llvm::raw_string_ostream desc_stream(desc);
293 desc_stream <<
"Exception "
295 exception_stream.ExceptionRecord.ExceptionCode, 8)
296 <<
" encountered at address "
298 exception_stream.ExceptionRecord.ExceptionAddress, 8);
303 stop_thread->SetStopInfo(stop_info);
321 llvm::Expected<llvm::ArrayRef<uint8_t>> mem_maybe =
328 llvm::ArrayRef<uint8_t> mem = *mem_maybe;
330 std::memcpy(buf, mem.data(), mem.size());
340 triple.setVendor(llvm::Triple::VendorType::UnknownVendor);
341 triple.setArch(llvm::Triple::ArchType::x86);
342 triple.setOS(llvm::Triple::OSType::Win32);
347 std::optional<llvm::ArrayRef<uint8_t>> auxv =
357 std::optional<llvm::ArrayRef<uint8_t>> lldb_generated_section =
359 return lldb_generated_section.has_value();
387 SectionList *sections = module_sp->GetSectionList();
388 for (
size_t i = 0; i < sections->
GetSize(); ++i) {
394 section_sp->GetByteSize());
400 to_add.emplace_back();
401 to_add.back().GetRange() = section_range;
402 to_add.back().SetLLDBPermissions(section_sp->GetPermissions());
404 to_add.back().SetName(module_sp->GetFileSpec().GetPath().c_str());
432 LocationDescriptor context_location = thread.Context;
437 context_location = it->second.ThreadContext;
439 llvm::ArrayRef<uint8_t> context;
448 return new_thread_list.
GetSize(
false) > 0;
452 llvm::StringRef name,
463 const auto dmp_bytes = minidump_uuid.
GetBytes();
464 const auto mod_bytes = module_sp->GetUUID().GetBytes();
465 const bool match = dmp_bytes.empty() || mod_bytes.empty() ||
466 mod_bytes.take_front(dmp_bytes.size()) == dmp_bytes;
468 LLDB_LOG(log,
"Partial uuid match for {0}.", name);
479 std::vector<uint8_t> breakpad_uuid;
480 std::vector<uint8_t> facebook_uuid;
481 HashElfTextSection(module_sp, breakpad_uuid, facebook_uuid);
482 if (dmp_bytes == llvm::ArrayRef<uint8_t>(breakpad_uuid)) {
483 LLDB_LOG(log,
"Breakpad .text hash match for {0}.", name);
486 if (dmp_bytes == llvm::ArrayRef<uint8_t>(facebook_uuid)) {
487 LLDB_LOG(log,
"Facebook .text hash match for {0}.", name);
499 std::vector<const minidump::Module *> filtered_modules =
504 for (
auto module : filtered_modules) {
506 module->ModuleNameRVA));
507 const uint64_t load_addr =
module->BaseOfImage;
508 const uint64_t load_size =
module->SizeOfImage;
509 LLDB_LOG(log,
"found module: name: {0} {1:x10}-{2:x10} size: {3}", name,
510 load_addr, load_addr + load_size, load_size);
514 if (llvm::StringRef(name).ends_with_insensitive(
"wow64.dll")) {
528 LLDB_LOG(log,
"Full uuid match for {0}.", name);
549 auto *objfile = module_sp->GetObjectFile();
551 objfile->GetPluginName() ==
567 "Unable to locate the matching object file, creating a "
568 "placeholder module for: {0}",
572 module_spec, load_addr, load_size);
581 bool load_addr_changed =
false;
582 module_sp->SetLoadAddress(
GetTarget(), load_addr,
false,
593 const bool add_exe_file_as_first_arg =
false;
595 add_exe_file_as_first_arg);
611#define INIT_BOOL(VAR, LONG, SHORT, DESC) \
612 VAR(LLDB_OPT_SET_1, false, LONG, SHORT, DESC, false, true)
613#define APPEND_OPT(VAR) \
614 m_option_group.Append(&VAR, LLDB_OPT_SET_ALL, LLDB_OPT_SET_1)
646 if (
m_dump_all.GetOptionValue().GetCurrentValue() ||
648 m_fb_all.GetOptionValue().GetCurrentValue() ||
668 m_fb_abort.GetOptionValue().GetCurrentValue() ||
673 m_dump_all.GetOptionValue().SetCurrentValue(
true);
676 return m_dump_all.GetOptionValue().GetCurrentValue();
764 "Dump information from the minidump file.", nullptr),
767 "Dump the everything in the minidump."),
769 "Dump the minidump directory map."),
771 "Dump linux /proc/cpuinfo."),
773 "Dump linux /proc/<pid>/status."),
775 "Dump linux /etc/lsb-release."),
777 "Dump linux /proc/<pid>/cmdline."),
779 "Dump linux /proc/<pid>/environ."),
781 "Dump linux /proc/<pid>/auxv."),
783 "Dump linux /proc/<pid>/maps."),
785 "Dump linux /proc/<pid>/stat."),
787 "Dump linux process uptime."),
789 "Dump linux /proc/<pid>/fd."),
791 "Dump all linux streams."),
793 "Dump Facebook application custom data."),
795 "Dump the Facebook build ID."),
797 "Dump Facebook application version string."),
799 "Dump Facebook java stack."),
801 "Dump Facebook Dalvik info."),
803 "Dump Facebook unwind symbols."),
805 "Dump Facebook error log."),
807 "Dump Facebook java stack."),
809 "Dump Facebook abort reason."),
811 "Dump Facebook thread name."),
813 "Dump Facebook logcat."),
862 s.
Printf(
"RVA SIZE TYPE StreamType\n");
863 s.
Printf(
"---------- ---------- ---------- --------------------------\n");
864 for (
const auto &stream_desc :
minidump.GetMinidumpFile().streams())
866 "0x%8.8x 0x%8.8x 0x%8.8x %s\n", (uint32_t)stream_desc.Location.RVA,
867 (uint32_t)stream_desc.Location.DataSize,
868 (
unsigned)(StreamType)stream_desc.Type,
872 auto DumpTextStream = [&](StreamType stream_type,
873 llvm::StringRef label) ->
void {
874 auto bytes =
minidump.GetStream(stream_type);
875 if (!bytes.empty()) {
878 s.
Printf(
"%s:\n%s\n\n", label.data(), bytes.data());
881 auto DumpBinaryStream = [&](StreamType stream_type,
882 llvm::StringRef label) ->
void {
883 auto bytes =
minidump.GetStream(stream_type);
884 if (!bytes.empty()) {
887 s.
Printf(
"%s:\n", label.data());
891 bytes.size(), 16, 0, 0, 0);
897 DumpTextStream(StreamType::LinuxCPUInfo,
"/proc/cpuinfo");
899 DumpTextStream(StreamType::LinuxProcStatus,
"/proc/PID/status");
901 DumpTextStream(StreamType::LinuxLSBRelease,
"/etc/lsb-release");
903 DumpTextStream(StreamType::LinuxCMDLine,
"/proc/PID/cmdline");
905 DumpTextStream(StreamType::LinuxEnviron,
"/proc/PID/environ");
907 DumpBinaryStream(StreamType::LinuxAuxv,
"/proc/PID/auxv");
909 DumpTextStream(StreamType::LinuxMaps,
"/proc/PID/maps");
911 DumpTextStream(StreamType::LinuxProcStat,
"/proc/PID/stat");
913 DumpTextStream(StreamType::LinuxProcUptime,
"uptime");
915 DumpTextStream(StreamType::LinuxProcFD,
"/proc/PID/fd");
917 DumpTextStream(StreamType::FacebookAppCustomData,
918 "Facebook App Data");
920 auto bytes =
minidump.GetStream(StreamType::FacebookBuildID);
921 if (bytes.size() >= 4) {
925 uint32_t build_id = data.
GetU32(&offset);
926 s.
Printf(
"Facebook Build ID:\n");
927 s.
Printf(
"%u\n", build_id);
932 DumpTextStream(StreamType::FacebookAppVersionName,
933 "Facebook Version String");
935 DumpTextStream(StreamType::FacebookJavaStack,
936 "Facebook Java Stack");
938 DumpTextStream(StreamType::FacebookDalvikInfo,
939 "Facebook Dalvik Info");
941 DumpBinaryStream(StreamType::FacebookUnwindSymbols,
942 "Facebook Unwind Symbols Bytes");
944 DumpTextStream(StreamType::FacebookDumpErrorLog,
945 "Facebook Error Log");
947 DumpTextStream(StreamType::FacebookAppStateLog,
948 "Faceook Application State Log");
950 DumpTextStream(StreamType::FacebookAbortReason,
951 "Facebook Abort Reason");
953 DumpTextStream(StreamType::FacebookThreadName,
954 "Facebook Thread Name");
956 DumpTextStream(StreamType::FacebookLogcat,
"Facebook Logcat");
964 "Commands for operating on a ProcessMinidump process.",
965 "process plugin <subcommand> [<subcommand-options>]") {
975 m_command_sp = std::make_shared<CommandObjectMultiwordProcessMinidump>(
976 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.
bool LoadSubCommand(llvm::StringRef cmd_name, const lldb::CommandObjectSP &command_obj) override
CommandObjectMultiword(CommandInterpreter &interpreter, const char *name, const char *help=nullptr, const char *syntax=nullptr, uint32_t flags=0)
friend class CommandInterpreter
CommandObjectParsed(CommandInterpreter &interpreter, const char *name, const char *help=nullptr, const char *syntax=nullptr, uint32_t flags=0)
CommandInterpreter & m_interpreter
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
Range< lldb::addr_t, lldb::addr_t > RangeType
A collection class for Module objects.
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.
void ForEach(std::function< IterationAction(const lldb::ModuleSP &module_sp)> const &callback) const
Applies 'callback' to each module in this ModuleList.
ArchSpec & GetArchitecture()
static lldb::ModuleSP CreateModuleFromObjectFile(Args &&...args)
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)
PostMortemProcess(lldb::TargetSP target_sp, lldb::ListenerSP listener_sp, const FileSpec &core_file)
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)
lldb::ByteOrder GetByteOrder() const
void SetID(lldb::pid_t new_pid)
Sets the stored pid.
uint32_t GetAddressByteSize() const
virtual DynamicLoader * GetDynamicLoader()
Get the dynamic loader plug-in for this process.
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.
friend class DynamicLoader
Target & GetTarget()
Get the target object pointer for this module.
lldb::SectionSP FindSectionByName(ConstString section_dstr) const
lldb::SectionSP GetSectionAtIndex(size_t idx) const
static Status FromErrorStringWithFormat(const char *format,...) __attribute__((format(printf
static Status static Status FromErrorStringWithFormatv(const char *format, Args &&...args)
static Status FromError(llvm::Error error)
Avoid using this in new code. Migrate APIs to llvm::Expected instead.
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.
lldb::addr_t GetSectionLoadAddress(const lldb::SectionSP §ion_sp)
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.
void SetExecutableModule(lldb::ModuleSP &module_sp, LoadDependentFiles load_dependent_files=eLoadDependentsDefault)
Set the main executable module.
bool MergeArchitecture(const ArchSpec &arch_spec)
void AddThread(const lldb::ThreadSP &thread_sp)
uint32_t GetSize(bool can_update=true)
Represents UUID's of various sizes.
llvm::ArrayRef< uint8_t > GetBytes() const
static lldb::UnixSignalsSP Create(const ArchSpec &arch)
static MemoryRegionInfo GetMemoryRegionInfo(const MemoryRegionInfos ®ions, lldb::addr_t load_addr)
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.
~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
lldb_private::DataExtractor GetAuxvData() override
std::unordered_map< uint32_t, const minidump::ExceptionStream > m_exceptions_by_tid
DynamicLoader * GetDynamicLoader() override
Get the dynamic loader plug-in for this process.
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::DataExtractor > DataExtractorSP
std::shared_ptr< lldb_private::Module > ModuleSP
BaseType GetRangeBase() const
BaseType GetRangeEnd() const