35#include "llvm/BinaryFormat/Magic.h"
36#include "llvm/Support/MemoryBuffer.h"
37#include "llvm/Support/Threading.h"
76void HashElfTextSection(
ModuleSP module_sp, std::vector<uint8_t> &breakpad_uuid,
77 std::vector<uint8_t> &facebook_uuid) {
78 SectionList *sect_list = module_sp->GetSectionList();
79 if (sect_list ==
nullptr)
84 constexpr size_t kMDGUIDSize = 16;
85 constexpr size_t kBreakpadPageSize = 4096;
90 const size_t text_size = sect_sp->GetFileSize();
91 const size_t read_size = std::min<size_t>(
92 llvm::alignTo(text_size, kMDGUIDSize), kBreakpadPageSize);
93 sect_sp->GetObjectFile()->GetData(sect_sp->GetFileOffset(), read_size,
96 breakpad_uuid.assign(kMDGUIDSize, 0);
97 facebook_uuid.assign(kMDGUIDSize, 0);
102 for (
size_t i = 0; i < kMDGUIDSize; i++)
103 facebook_uuid[i] ^= text_size % 255;
109 const uint8_t *ptr = extractor_sp->GetDataStart();
110 const uint8_t *ptr_end = extractor_sp->GetDataEnd();
111 while (ptr < ptr_end) {
112 for (
unsigned i = 0; i < kMDGUIDSize; i++) {
113 breakpad_uuid[i] ^= ptr[i];
114 facebook_uuid[i] ^= ptr[i];
123 return "Minidump plug-in.";
130 if (!crash_file || can_connect)
135 constexpr size_t header_size =
sizeof(Header);
141 lldbassert(DataPtr->GetByteSize() == header_size);
142 if (identify_magic(toStringRef(DataPtr->GetData())) != llvm::file_magic::minidump)
150 return std::make_shared<ProcessMinidump>(target_sp, listener_sp, *crash_file,
155 bool plugin_specified_by_name) {
176 static llvm::once_flag g_once_flag;
178 llvm::call_once(g_once_flag, []() {
191 if (!expected_parser)
200 case llvm::Triple::x86:
201 case llvm::Triple::x86_64:
202 case llvm::Triple::arm:
203 case llvm::Triple::aarch64:
216 for (
auto exception_stream : exception_stream_it) {
219 if (!exception_stream)
223 .try_emplace(exception_stream->ThreadId, exception_stream.get())
226 "Duplicate exception stream for tid {0}", exception_stream->ThreadId);
238 "setting process ID to 1",
252 constexpr uint32_t BreakpadDumpRequested = 0xFFFFFFFF;
253 if (exception_stream.ExceptionRecord.ExceptionCode ==
254 BreakpadDumpRequested) {
274 if (arch.
GetTriple().getOS() == llvm::Triple::Linux) {
275 uint32_t signo = exception_stream.ExceptionRecord.ExceptionCode;
280 const char *description =
nullptr;
281 if (exception_stream.ExceptionRecord.ExceptionFlags ==
282 llvm::minidump::Exception::LLDB_FLAG)
283 description =
reinterpret_cast<const char *
>(
284 exception_stream.ExceptionRecord.ExceptionInformation);
286 llvm::StringRef description_str(description,
287 Exception::MaxParameterBytes);
289 *stop_thread, signo, description_str.str().c_str());
290 }
else if (arch.
GetTriple().getVendor() == llvm::Triple::Apple) {
292 *stop_thread, exception_stream.ExceptionRecord.ExceptionCode, 2,
293 exception_stream.ExceptionRecord.ExceptionFlags,
294 exception_stream.ExceptionRecord.ExceptionAddress, 0);
297 llvm::raw_string_ostream desc_stream(desc);
298 desc_stream <<
"Exception "
300 exception_stream.ExceptionRecord.ExceptionCode, 8)
301 <<
" encountered at address "
303 exception_stream.ExceptionRecord.ExceptionAddress, 8);
308 stop_thread->SetStopInfo(stop_info);
326 llvm::Expected<llvm::ArrayRef<uint8_t>> mem_maybe =
333 llvm::ArrayRef<uint8_t> mem = *mem_maybe;
335 std::memcpy(buf, mem.data(), mem.size());
345 triple.setVendor(llvm::Triple::VendorType::UnknownVendor);
346 triple.setArch(llvm::Triple::ArchType::x86);
347 triple.setOS(llvm::Triple::OSType::Win32);
352 std::optional<llvm::ArrayRef<uint8_t>> auxv =
362 std::optional<llvm::ArrayRef<uint8_t>> lldb_generated_section =
364 return lldb_generated_section.has_value();
392 SectionList *sections = module_sp->GetSectionList();
393 for (
size_t i = 0; i < sections->
GetSize(); ++i) {
399 section_sp->GetByteSize());
405 to_add.emplace_back();
406 to_add.back().GetRange() = section_range;
407 to_add.back().SetLLDBPermissions(section_sp->GetPermissions());
409 to_add.back().SetName(module_sp->GetFileSpec().GetPath().c_str());
437 LocationDescriptor context_location = thread.Context;
442 context_location = it->second.ThreadContext;
444 llvm::ArrayRef<uint8_t> context;
453 return new_thread_list.
GetSize(
false) > 0;
457 llvm::StringRef name,
468 const auto dmp_bytes = minidump_uuid.
GetBytes();
469 const auto mod_bytes = module_sp->GetUUID().GetBytes();
470 const bool match = dmp_bytes.empty() || mod_bytes.empty() ||
471 mod_bytes.take_front(dmp_bytes.size()) == dmp_bytes;
473 LLDB_LOG(log,
"Partial uuid match for {0}.", name);
484 std::vector<uint8_t> breakpad_uuid;
485 std::vector<uint8_t> facebook_uuid;
486 HashElfTextSection(module_sp, breakpad_uuid, facebook_uuid);
487 if (dmp_bytes == llvm::ArrayRef<uint8_t>(breakpad_uuid)) {
488 LLDB_LOG(log,
"Breakpad .text hash match for {0}.", name);
491 if (dmp_bytes == llvm::ArrayRef<uint8_t>(facebook_uuid)) {
492 LLDB_LOG(log,
"Facebook .text hash match for {0}.", name);
504 std::vector<const minidump::Module *> filtered_modules =
509 for (
auto module : filtered_modules) {
511 module->ModuleNameRVA));
512 const uint64_t load_addr =
module->BaseOfImage;
513 const uint64_t load_size =
module->SizeOfImage;
514 LLDB_LOG(log,
"found module: name: {0} {1:x10}-{2:x10} size: {3}", name,
515 load_addr, load_addr + load_size, load_size);
519 if (llvm::StringRef(name).ends_with_insensitive(
"wow64.dll")) {
533 LLDB_LOG(log,
"Full uuid match for {0}.", name);
554 auto *objfile = module_sp->GetObjectFile();
556 objfile->GetPluginName() ==
572 "Unable to locate the matching object file, creating a "
573 "placeholder module for: {0}",
577 module_spec, load_addr, load_size);
586 bool load_addr_changed =
false;
587 module_sp->SetLoadAddress(
GetTarget(), load_addr,
false,
598 const bool add_exe_file_as_first_arg =
false;
600 add_exe_file_as_first_arg);
616#define INIT_BOOL(VAR, LONG, SHORT, DESC) \
617 VAR(LLDB_OPT_SET_1, false, LONG, SHORT, DESC, false, true)
618#define APPEND_OPT(VAR) \
619 m_option_group.Append(&VAR, LLDB_OPT_SET_ALL, LLDB_OPT_SET_1)
651 if (
m_dump_all.GetOptionValue().GetCurrentValue() ||
653 m_fb_all.GetOptionValue().GetCurrentValue() ||
673 m_fb_abort.GetOptionValue().GetCurrentValue() ||
678 m_dump_all.GetOptionValue().SetCurrentValue(
true);
681 return m_dump_all.GetOptionValue().GetCurrentValue();
769 "Dump information from the minidump file.", nullptr),
772 "Dump the everything in the minidump."),
774 "Dump the minidump directory map."),
776 "Dump linux /proc/cpuinfo."),
778 "Dump linux /proc/<pid>/status."),
780 "Dump linux /etc/lsb-release."),
782 "Dump linux /proc/<pid>/cmdline."),
784 "Dump linux /proc/<pid>/environ."),
786 "Dump linux /proc/<pid>/auxv."),
788 "Dump linux /proc/<pid>/maps."),
790 "Dump linux /proc/<pid>/stat."),
792 "Dump linux process uptime."),
794 "Dump linux /proc/<pid>/fd."),
796 "Dump all linux streams."),
798 "Dump Facebook application custom data."),
800 "Dump the Facebook build ID."),
802 "Dump Facebook application version string."),
804 "Dump Facebook java stack."),
806 "Dump Facebook Dalvik info."),
808 "Dump Facebook unwind symbols."),
810 "Dump Facebook error log."),
812 "Dump Facebook java stack."),
814 "Dump Facebook abort reason."),
816 "Dump Facebook thread name."),
818 "Dump Facebook logcat."),
867 s.
Printf(
"RVA SIZE TYPE StreamType\n");
868 s.
Printf(
"---------- ---------- ---------- --------------------------\n");
869 for (
const auto &stream_desc :
minidump.GetMinidumpFile().streams())
871 "0x%8.8x 0x%8.8x 0x%8.8x %s\n", (uint32_t)stream_desc.Location.RVA,
872 (uint32_t)stream_desc.Location.DataSize,
873 (
unsigned)(StreamType)stream_desc.Type,
877 auto DumpTextStream = [&](StreamType stream_type,
878 llvm::StringRef label) ->
void {
879 auto bytes =
minidump.GetStream(stream_type);
880 if (!bytes.empty()) {
883 s.
Printf(
"%s:\n%s\n\n", label.data(), bytes.data());
886 auto DumpBinaryStream = [&](StreamType stream_type,
887 llvm::StringRef label) ->
void {
888 auto bytes =
minidump.GetStream(stream_type);
889 if (!bytes.empty()) {
892 s.
Printf(
"%s:\n", label.data());
896 bytes.size(), 16, 0, 0, 0);
902 DumpTextStream(StreamType::LinuxCPUInfo,
"/proc/cpuinfo");
904 DumpTextStream(StreamType::LinuxProcStatus,
"/proc/PID/status");
906 DumpTextStream(StreamType::LinuxLSBRelease,
"/etc/lsb-release");
908 DumpTextStream(StreamType::LinuxCMDLine,
"/proc/PID/cmdline");
910 DumpTextStream(StreamType::LinuxEnviron,
"/proc/PID/environ");
912 DumpBinaryStream(StreamType::LinuxAuxv,
"/proc/PID/auxv");
914 DumpTextStream(StreamType::LinuxMaps,
"/proc/PID/maps");
916 DumpTextStream(StreamType::LinuxProcStat,
"/proc/PID/stat");
918 DumpTextStream(StreamType::LinuxProcUptime,
"uptime");
920 DumpTextStream(StreamType::LinuxProcFD,
"/proc/PID/fd");
922 DumpTextStream(StreamType::FacebookAppCustomData,
923 "Facebook App Data");
925 auto bytes =
minidump.GetStream(StreamType::FacebookBuildID);
926 if (bytes.size() >= 4) {
930 uint32_t build_id = data.
GetU32(&offset);
931 s.
Printf(
"Facebook Build ID:\n");
932 s.
Printf(
"%u\n", build_id);
937 DumpTextStream(StreamType::FacebookAppVersionName,
938 "Facebook Version String");
940 DumpTextStream(StreamType::FacebookJavaStack,
941 "Facebook Java Stack");
943 DumpTextStream(StreamType::FacebookDalvikInfo,
944 "Facebook Dalvik Info");
946 DumpBinaryStream(StreamType::FacebookUnwindSymbols,
947 "Facebook Unwind Symbols Bytes");
949 DumpTextStream(StreamType::FacebookDumpErrorLog,
950 "Facebook Error Log");
952 DumpTextStream(StreamType::FacebookAppStateLog,
953 "Faceook Application State Log");
955 DumpTextStream(StreamType::FacebookAbortReason,
956 "Facebook Abort Reason");
958 DumpTextStream(StreamType::FacebookThreadName,
959 "Facebook Thread Name");
961 DumpTextStream(StreamType::FacebookLogcat,
"Facebook Logcat");
969 "Commands for operating on a ProcessMinidump process.",
970 "process plugin <subcommand> [<subcommand-options>]") {
980 m_command_sp = std::make_shared<CommandObjectMultiwordProcessMinidump>(
981 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