64#include "clang/Driver/CreateInvocationFromArgs.h"
65#include "clang/Frontend/CompilerInstance.h"
66#include "clang/Frontend/CompilerInvocation.h"
67#include "clang/Frontend/FrontendActions.h"
68#include "clang/Serialization/ObjectFilePCHContainerReader.h"
69#include "llvm/ADT/ScopeExit.h"
70#include "llvm/ADT/StringRef.h"
71#include "llvm/Support/FileSystem.h"
72#include "llvm/Support/FormatAdapters.h"
79 const char *prefix_cstr,
80 bool show_stopped_process_status,
Stream &strm) {
85 bool exe_valid =
false;
90 ::strcpy(exe_path,
"<none>");
92 std::string formatted_label =
"";
93 const std::string &label = target->
GetLabel();
95 formatted_label =
" (" + label +
")";
98 strm.
Printf(
"%starget #%u%s: %s", prefix_cstr ? prefix_cstr :
"", target_idx,
99 formatted_label.data(), exe_path);
101 uint32_t properties = 0;
109 strm.
Format(
"{0}platform={1}", properties++ > 0 ?
", " :
" ( ",
110 platform_sp->GetName());
113 bool show_process_status =
false;
116 StateType state = process_sp->GetState();
117 if (show_stopped_process_status)
121 strm.
Printf(
"%spid=%" PRIu64, properties++ > 0 ?
", " :
" ( ", pid);
122 strm.
Printf(
"%sstate=%s", properties++ > 0 ?
", " :
" ( ", state_cstr);
128 if (show_process_status) {
129 const bool only_threads_with_stop_reason =
true;
130 const uint32_t start_frame = 0;
131 const uint32_t num_frames = 1;
132 const uint32_t num_frames_with_source = 1;
133 const bool stop_format =
false;
134 process_sp->GetStatus(strm);
135 process_sp->GetThreadStatus(strm, only_threads_with_stop_reason,
136 start_frame, num_frames, num_frames_with_source,
142 bool show_stopped_process_status,
Stream &strm) {
147 for (uint32_t i = 0; i < num_targets; ++i) {
150 bool is_selected = target_sp.get() == selected_target_sp.get();
152 show_stopped_process_status, strm);
159#define LLDB_OPTIONS_target_dependents
160#include "CommandOptions.inc"
169 return llvm::ArrayRef(g_target_dependents_options);
177 if (option_value.empty()) {
182 const char short_option =
183 g_target_dependents_options[option_idx].short_option;
184 if (short_option ==
'd') {
187 option_value, g_target_dependents_options[option_idx].enum_values, 0,
193 "unrecognized short option '%c'", short_option);
213#pragma mark CommandObjectTargetCreate
219 interpreter,
"target create",
220 "Create a target using the argument as the main executable.",
224 "Fullpath to a core file to use for this target."),
226 "Optional name for this target.", nullptr),
229 "Fullpath to a stand alone debug "
230 "symbols file for when debug symbols "
231 "are not in the executable."),
234 "Fullpath to the file on the remote host if debugging remotely.") {
265 llvm::toString(file.takeError()));
270 if (argc == 1 || core_file || remote_file) {
279 llvm::toString(file.takeError()));
287 bool must_set_platform_path =
false;
292 llvm::StringRef arch_cstr =
m_arch_option.GetArchitectureName();
294 debugger, file_path, arch_cstr,
303 const llvm::StringRef label =
304 m_label.GetOptionValue().GetCurrentValueAsRef();
305 if (!label.empty()) {
306 if (
auto E = target_sp->SetLabel(label))
311 llvm::scope_exit on_error(
313 target_list.DeleteTarget(target_sp);
320 PlatformSP platform_sp = target_sp->GetPlatform();
324 file_spec.
SetFile(file_path, FileSpec::Style::native);
329 if (platform_sp && platform_sp->IsHost() &&
339 if (!platform_sp->GetFileExists(remote_file)) {
340 Status err = platform_sp->PutFile(file_spec, remote_file);
354 Status err = platform_sp->GetFile(remote_file, file_spec);
368 if (platform_sp->IsHost()) {
369 result.
AppendError(
"Supply a local file, not a remote file, "
370 "when debugging on the host.");
373 if (platform_sp->IsConnected() && !platform_sp->GetFileExists(remote_file)) {
374 result.
AppendError(
"remote --> local transfer without local "
375 "path is not implemented yet");
382 target_sp->SetProcessLaunchInfo(launch_info);
386 result.
AppendError(
"no platform found for target");
391 if (symfile || remote_file) {
392 ModuleSP module_sp(target_sp->GetExecutableModule());
395 module_sp->SetSymbolFileFileSpec(symfile);
397 std::string remote_path = remote_file.
GetPath();
398 target_sp->SetArg0(remote_path.c_str());
399 module_sp->SetPlatformFileSpec(remote_file);
404 if (must_set_platform_path) {
407 target_sp->GetOrCreateModule(main_module_spec,
true );
409 module_sp->SetPlatformFileSpec(remote_file);
415 target_sp->AppendExecutableSearchPaths(core_file_dir);
417 ProcessSP process_sp(target_sp->CreateProcess(
418 GetDebugger().GetListener(), llvm::StringRef(), &core_file,
false));
425 target_sp->GetStatistics().GetLoadCoreTime());
426 error = process_sp->LoadCore();
434 "Core file '{0}' ({1}) was loaded.\n", core_file.
GetPath(),
435 target_sp->GetArchitecture().GetArchitectureName());
445 "Current executable set to '{0}' ({1}).",
447 target_sp->GetArchitecture().GetArchitectureName());
453 "argument, or use the --core option.\n",
469#pragma mark CommandObjectTargetList
475 interpreter,
"target list",
476 "List all current targets in the current debug session.", nullptr) {
485 bool show_stopped_process_status =
false;
487 show_stopped_process_status, strm) == 0) {
494#pragma mark CommandObjectTargetSelect
500 interpreter,
"target select",
501 "Select a target as the current target by target index.", nullptr) {
514 if (llvm::to_integer(target_identifier, target_idx)) {
515 if (target_idx < num_targets) {
518 bool show_stopped_process_status =
false;
522 if (num_targets > 0) {
524 "index %u is out of range, valid target indexes are 0 - %u\n",
525 target_idx, num_targets - 1);
528 "index %u is out of range since there are no active targets\n",
533 for (
size_t i = 0; i < num_targets; i++) {
535 const std::string &label = target_sp->GetLabel();
536 if (!label.empty() && label == target_identifier) {
546 bool show_stopped_process_status =
false;
556 "'target select' takes a single argument: a target index\n");
561#pragma mark CommandObjectTargetDelete
567 "Delete one or more targets by target index.",
573 "Perform extra cleanup to minimize memory consumption after "
574 "deleting the target. "
575 "By default, LLDB will keep in memory any modules previously "
576 "loaded by the target as well "
577 "as all of its debug info. Specifying --clean will unload all of "
578 "these shared modules and "
579 "cause them to be reparsed again the next time the target is run",
594 std::vector<TargetSP> delete_target_list;
601 }
else if (argc > 0) {
604 if (num_targets == 0) {
609 for (
auto &entry : args.
entries()) {
611 if (entry.ref().getAsInteger(0, target_idx)) {
616 if (target_idx < num_targets) {
619 delete_target_list.push_back(target_sp);
625 "target indexes are 0 - %u\n",
626 target_idx, num_targets - 1);
629 "target index %u is out of range, the only valid index is 0\n",
640 delete_target_list.push_back(target_sp);
643 const size_t num_targets_to_delete = delete_target_list.size();
644 for (
size_t idx = 0; idx < num_targets_to_delete; ++idx) {
645 target_sp = delete_target_list[idx];
647 target_sp->Destroy();
652 const bool mandatory =
true;
656 (uint32_t)num_targets_to_delete);
669 interpreter,
"target show-launch-environment",
670 "Shows the environment being passed to the process when launched, "
671 "taking info account 3 settings: target.env-vars, "
672 "target.inherit-env and target.unset-env-vars.",
673 nullptr, eCommandRequiresTarget) {}
682 std::vector<Environment::value_type *> env_vector;
683 env_vector.reserve(env.size());
685 env_vector.push_back(&KV);
686 std::sort(env_vector.begin(), env_vector.end(),
687 [](Environment::value_type *a, Environment::value_type *b) {
688 return a->first() < b->first();
692 for (
auto &KV : env_vector)
693 strm.
Format(
"{0}={1}\n", KV->first(), KV->second);
699#pragma mark CommandObjectTargetVariable
708 "Read global variables for the current target, "
709 "before or while running a process.",
710 nullptr, eCommandRequiresTarget),
715 "A basename or fullpath to a file that contains "
716 "global variables. This option can be "
717 "specified multiple times."),
721 "A basename or fullpath to a shared library to use in the search "
723 "variables. This option can be specified multiple times.") {
742 const char *root_name) {
745 if (!valobj_sp->GetTargetSP()->GetDisplayRuntimeSupportValues() &&
746 valobj_sp->IsRuntimeSupportValue())
749 switch (var_sp->GetScope()) {
780 bool show_fullpaths =
false;
781 bool show_module =
true;
782 if (var_sp->DumpDeclaration(&s, show_fullpaths, show_module))
792 if (llvm::Error
error = valobj_sp->Dump(s, options))
798 size_t old_size = variable_list.
GetSize();
803 return variable_list.
GetSize() - old_size;
814 if (variable_list.
Empty())
818 s.
Format(
"Global variables for {0} in {1}:\n",
821 s.
Printf(
"Global variables for %s\n",
822 sc.
module_sp->GetFileSpec().GetPath().c_str());
851 bool use_var_name =
false;
856 "error: invalid regular expression: '%s'\n", arg.c_str());
862 matches = variable_list.
GetSize();
865 arg.c_str(),
m_exe_ctx.GetBestExecutionContextScope(),
867 matches = variable_list.
GetSize();
875 for (uint32_t global_idx = 0; global_idx < matches; ++global_idx) {
882 m_exe_ctx.GetBestExecutionContextScope(), var_sp);
886 use_var_name ? var_sp->GetName().GetCString()
898 const size_t num_compile_units = compile_units.
GetSize();
899 const size_t num_shlibs = shlibs.
GetSize();
900 if (num_compile_units == 0 && num_shlibs == 0) {
901 bool success =
false;
908 const bool can_create =
true;
911 if (comp_unit_varlist_sp) {
912 size_t count = comp_unit_varlist_sp->GetSize();
925 "no global variables in current compile unit: {0}\n",
929 "no debug information for frame %u\n",
932 result.
AppendError(
"'target variable' takes one or more global "
933 "variable names as arguments\n");
938 if (num_shlibs > 0) {
939 for (
size_t shlib_idx = 0; shlib_idx < num_shlibs; ++shlib_idx) {
946 if (num_compile_units > 0) {
947 for (
size_t cu_idx = 0; cu_idx < num_compile_units; ++cu_idx)
948 module_sp->FindCompileUnits(
958 "target doesn't contain the specified shared library: %s\n",
959 module_file.
GetPath().c_str());
965 for (
size_t cu_idx = 0; cu_idx < num_compile_units; ++cu_idx)
972 const bool can_create =
true;
974 sc.comp_unit->GetVariableList(can_create));
975 if (comp_unit_varlist_sp)
978 }
else if (sc.module_sp) {
981 llvm::StringRef(
"."));
983 sc.module_sp->FindGlobalVariables(all_globals_regex,
UINT32_MAX,
1003#pragma mark CommandObjectTargetModulesSearchPathsAdd
1009 "Add new image search paths substitution pairs to "
1010 "the current target.",
1011 nullptr, eCommandRequiresTarget) {
1030 arg.push_back(old_prefix_arg);
1031 arg.push_back(new_prefix_arg);
1043 result.
AppendError(
"add requires an even number of arguments\n");
1045 for (
size_t i = 0; i < argc; i += 2) {
1049 if (from[0] && to[0]) {
1051 "target modules search path adding ImageSearchPath "
1052 "pair: '%s' -> '%s'",
1054 bool last_pair = ((argc - i) == 2);
1056 from, to, last_pair);
1060 result.
AppendError(
"<path-prefix> can't be empty\n");
1062 result.
AppendError(
"<new-path-prefix> can't be empty\n");
1069#pragma mark CommandObjectTargetModulesSearchPathsClear
1075 "Clear all current image search path substitution "
1076 "pairs from the current target.",
1077 "target modules search-paths clear",
1078 eCommandRequiresTarget) {}
1091#pragma mark CommandObjectTargetModulesSearchPathsInsert
1097 "Insert a new image search path substitution pair "
1098 "into the current target at the specified index.",
1099 nullptr, eCommandRequiresTarget) {
1111 arg1.push_back(index_arg);
1127 arg2.push_back(old_prefix_arg);
1128 arg2.push_back(new_prefix_arg);
1145 const size_t num = list.
GetSize();
1147 for (
size_t i = 0; i < num; ++i) {
1151 strm << old_path <<
" -> " << new_path;
1161 if (argc >= 3 && argc & 1) {
1162 uint32_t insert_idx;
1166 "<index> parameter is not an integer: '%s'.\n",
1175 for (uint32_t i = 0; i < argc; i += 2, ++insert_idx) {
1179 if (from[0] && to[0]) {
1180 bool last_pair = ((argc - i) == 2);
1186 result.
AppendError(
"<path-prefix> can't be empty\n");
1188 result.
AppendError(
"<new-path-prefix> can't be empty\n");
1193 result.
AppendError(
"insert requires at least three arguments\n");
1198#pragma mark CommandObjectTargetModulesSearchPathsList
1204 "List all current image search path substitution "
1205 "pairs in the current target.",
1206 "target modules search-paths list",
1207 eCommandRequiresTarget) {}
1219#pragma mark CommandObjectTargetModulesSearchPathsQuery
1225 interpreter,
"target modules search-paths query",
1226 "Transform a path using the first applicable image search path.",
1227 nullptr, eCommandRequiresTarget) {
1237 result.
AppendError(
"query requires one argument\n");
1254 bool full_triple, uint32_t width) {
1259 module->GetArchitecture().DumpTriple(arch_strm.AsRawOstream());
1262 std::string arch_str = std::string(arch_strm.
GetString());
1265 strm.
Printf(
"%-*s", width, arch_str.c_str());
1273 module->GetUUID().Dump(strm);
1282 uint32_t num_matches = 0;
1285 num_matches =
module->ResolveSymbolContextsForFileSpec(
1286 file_spec, 0, false, eSymbolContextCompUnit, sc_list);
1288 bool first_module =
true;
1293 strm <<
"Line table for " << sc.comp_unit->GetPrimaryFile() <<
" in `"
1294 <<
module->GetFileSpec().GetFilename() << "\n";
1295 LineTable *line_table = sc.comp_unit->GetLineTable();
1301 strm <<
"No line table";
1303 first_module =
false;
1311 if (file_spec_ptr) {
1313 std::string fullpath = file_spec_ptr->
GetPath();
1314 strm.
Printf(
"%-*s", width, fullpath.c_str());
1323 strm.
Printf(
"%-*s", width,
"");
1328 if (file_spec_ptr) {
1337 strm.
Printf(
"%-*s", width,
"");
1342 if (file_spec_ptr) {
1351 strm.
Printf(
"%-*s", width,
"");
1355 std::lock_guard<std::recursive_mutex> guard(module_list.
GetMutex());
1356 const size_t num_modules = module_list.
GetSize();
1357 if (num_modules == 0)
1360 size_t num_dumped = 0;
1361 strm.
Format(
"Dumping headers for {0} module(s).\n", num_modules);
1365 if (num_dumped++ > 0) {
1369 ObjectFile *objfile = module_sp->GetObjectFile();
1371 objfile->
Dump(&strm);
1373 strm.
Format(
"No object file for module: {0:F}\n",
1374 module_sp->GetFileSpec());
1389 sort_order, name_preference);
1395 SectionList *section_list =
module->GetSectionList();
1397 strm.
Printf(
"Sections for '%s' (%s):\n",
1410 symbol_file->Dump(strm);
1418 Module *module,
bool errors_only,
1419 bool load_all_debug_info) {
1423 if (symbol_file->GetSeparateDebugInfo(d, errors_only,
1424 load_all_debug_info)) {
1426 std::make_shared<StructuredData::Dictionary>(std::move(d)));
1439 "------------------ --- -----------------------------------------");
1448 strm.
Printf(
"0x%16.16" PRIx64
" ", dwo_id);
1450 strm.
Printf(
"0x???????????????? ");
1452 llvm::StringRef
error;
1454 strm <<
"E " <<
error;
1456 llvm::StringRef resolved_dwo_path;
1458 resolved_dwo_path)) {
1459 strm <<
" " << resolved_dwo_path;
1460 if (resolved_dwo_path.ends_with(
".dwp")) {
1461 llvm::StringRef dwo_name;
1463 strm <<
"(" << dwo_name <<
")";
1476 strm.
PutCString(
"------------------ --- ---------------------");
1483 uint32_t oso_mod_time;
1485 strm.
Printf(
"0x%16.16" PRIx32
" ", oso_mod_time);
1487 llvm::StringRef
error;
1489 strm <<
"E " <<
error;
1491 llvm::StringRef oso_path;
1493 strm <<
" " << oso_path;
1502 bool verbose,
bool all_ranges,
Stream &strm,
1503 std::optional<Stream::HighlightSettings> settings = std::nullopt) {
1505 strm.
Indent(
" Address: ");
1510 strm.
Indent(
" Summary: ");
1526 Module *module, uint32_t resolve_mask,
1528 bool verbose,
bool all_ranges) {
1537 else if (so_addr.
GetModule().get() != module)
1546 DumpAddress(exe_scope, so_addr, verbose, all_ranges, strm);
1555 const char *name,
bool name_is_regex,
1556 bool verbose,
bool all_ranges) {
1560 Symtab *symtab =
module->GetSymtab();
1566 std::vector<uint32_t> match_indexes;
1568 uint32_t num_matches = 0;
1569 if (name_is_regex) {
1578 if (num_matches > 0) {
1580 strm.
Printf(
"%u symbols match %s'%s' in ", num_matches,
1581 name_is_regex ?
"the regular expression " :
"", name);
1588 for (uint32_t i = 0; i < num_matches; ++i) {
1595 use_color && name_is_regex
1596 ? std::optional<Stream::HighlightSettings>{settings}
1604 use_color && name_is_regex
1605 ? std::optional<Stream::HighlightSettings>{settings}
1626 std::optional<Stream::HighlightSettings> settings = std::nullopt) {
1628 bool first_module =
true;
1634 if (sc.line_entry.IsValid())
1635 addr = sc.line_entry.range.GetBaseAddress();
1636 else if (sc.block && sc.block->GetContainingInlinedBlock())
1637 sc.block->GetContainingInlinedBlock()->GetStartAddress(addr);
1639 addr = sc.GetFunctionOrSymbolAddress();
1641 DumpAddress(exe_scope, addr, verbose, all_ranges, strm, settings);
1642 first_module =
false;
1649 const char *name,
bool name_is_regex,
1651 bool verbose,
bool all_ranges) {
1652 if (module && name && name[0]) {
1654 size_t num_matches = 0;
1655 if (name_is_regex) {
1657 module->FindFunctions(function_name_regex, options, sc_list);
1660 module->FindFunctions(function_name, CompilerDeclContext(),
1661 eFunctionNameTypeAuto, options, sc_list);
1663 num_matches = sc_list.
GetSize();
1666 strm.
Printf(
"%" PRIu64
" match%s found in ", (uint64_t)num_matches,
1667 num_matches > 1 ?
"es" :
"");
1672 strm, sc_list, verbose, all_ranges);
1681 Module *module,
const char *name_cstr,
1682 bool name_is_regex) {
1683 if (module && name_cstr && name_cstr[0]) {
1686 module->FindTypes(query, results);
1691 sc.
module_sp =
module->shared_from_this();
1695 if (type_list.
Empty())
1698 const uint64_t num_matches = type_list.
GetSize();
1701 strm.
Printf(
"%" PRIu64
" match%s found in ", num_matches,
1702 num_matches > 1 ?
"es" :
"");
1710 type_sp->GetFullCompilerType();
1713 TypeSP typedef_type_sp(type_sp);
1714 TypeSP typedefed_type_sp(typedef_type_sp->GetTypedefType());
1715 while (typedefed_type_sp) {
1717 strm.
Printf(
" typedef '%s': ",
1718 typedef_type_sp->GetName().GetCString());
1719 typedefed_type_sp->GetFullCompilerType();
1722 typedef_type_sp = typedefed_type_sp;
1723 typedefed_type_sp = typedef_type_sp->GetTypedefType();
1734 const char *name_cstr,
bool name_is_regex) {
1737 module.FindTypes(query, results);
1740 sc.
module_sp =
module.shared_from_this();
1742 if (type_list.
Empty())
1754 type_sp->GetFullCompilerType();
1757 TypeSP typedef_type_sp(type_sp);
1758 TypeSP typedefed_type_sp(typedef_type_sp->GetTypedefType());
1759 while (typedefed_type_sp) {
1761 strm.
Printf(
" typedef '%s': ",
1762 typedef_type_sp->GetName().GetCString());
1763 typedefed_type_sp->GetFullCompilerType();
1766 typedef_type_sp = typedefed_type_sp;
1767 typedefed_type_sp = typedef_type_sp->GetTypedefType();
1777 uint32_t line,
bool check_inlines,
1778 bool verbose,
bool all_ranges) {
1779 if (module && file_spec) {
1781 const uint32_t num_matches =
module->ResolveSymbolContextsForFileSpec(
1782 file_spec, line, check_inlines, eSymbolContextEverything, sc_list);
1783 if (num_matches > 0) {
1785 strm.
Printf(
"%u match%s found in ", num_matches,
1786 num_matches > 1 ?
"es" :
"");
1789 strm.
Printf(
":%u", line);
1795 strm, sc_list, verbose, all_ranges);
1804 bool check_global_list) {
1805 FileSpec module_file_spec(module_name);
1808 const size_t initial_size = module_list.
GetSize();
1810 if (check_global_list) {
1812 std::lock_guard<std::recursive_mutex> guard(
1816 for (
size_t image_idx = 0; image_idx < num_modules; ++image_idx) {
1821 module_sp =
module->shared_from_this();
1829 const size_t num_matches = module_list.
GetSize();
1833 if (num_matches == 0) {
1842 return module_list.
GetSize() - initial_size;
1845#pragma mark CommandObjectTargetModulesModuleAutoComplete
1872#pragma mark CommandObjectTargetModulesSourceFileAutoComplete
1882 const char *syntax, uint32_t flags)
1897#pragma mark CommandObjectTargetModulesDumpObjfile
1904 interpreter,
"target modules dump objfile",
1905 "Dump the object file headers from one or more target modules.",
1906 nullptr, eCommandRequiresTarget) {}
1914 size_t num_dumped = 0;
1919 if (num_dumped == 0) {
1920 result.
AppendError(
"the target has no associated executable images");
1925 const char *arg_cstr;
1926 for (
int arg_idx = 0;
1929 size_t num_matched =
1931 if (num_matched == 0) {
1933 "unable to find an image that matches '{0}'", arg_cstr);
1941 if (num_dumped > 0) {
1944 result.
AppendError(
"no matching executable images found");
1949#define LLDB_OPTIONS_target_modules_dump_symtab
1950#include "CommandOptions.inc"
1957 interpreter,
"target modules dump symtab",
1958 "Dump the symbol table from one or more target modules.", nullptr,
1959 eCommandRequiresTarget) {}
1976 switch (short_option) {
1989 llvm_unreachable(
"Unimplemented option");
2000 return llvm::ArrayRef(g_target_modules_dump_symtab_options);
2010 uint32_t num_dumped = 0;
2018 std::lock_guard<std::recursive_mutex> guard(module_list.
GetMutex());
2019 const size_t num_modules = module_list.
GetSize();
2020 if (num_modules > 0) {
2022 "Dumping symbol table for {0} modules.\n", num_modules);
2024 if (num_dumped > 0) {
2029 "Interrupted in dump all symtabs with {0} "
2030 "of {1} dumped.", num_dumped, num_modules))
2035 module_sp.get(),
m_options.m_sort_order,
2039 result.
AppendError(
"the target has no associated executable images");
2044 const char *arg_cstr;
2045 for (
int arg_idx = 0;
2049 const size_t num_matches =
2051 if (num_matches > 0) {
2054 if (num_dumped > 0) {
2059 "Interrupted in dump symtab list with {0} of {1} dumped.",
2060 num_dumped, num_matches))
2065 module_sp.get(),
m_options.m_sort_order,
2071 "unable to find an image that matches '{0}'", arg_cstr);
2078 result.
AppendError(
"no matching executable images found");
2085#pragma mark CommandObjectTargetModulesDumpSections
2094 interpreter,
"target modules dump sections",
2095 "Dump the sections from one or more target modules.",
2097 nullptr, eCommandRequiresTarget) {}
2104 uint32_t num_dumped = 0;
2109 if (num_modules == 0) {
2110 result.
AppendError(
"the target has no associated executable images");
2116 for (
size_t image_idx = 0; image_idx < num_modules; ++image_idx) {
2118 "Interrupted in dump all sections with {0} of {1} dumped",
2119 image_idx, num_modules))
2129 const char *arg_cstr;
2130 for (
int arg_idx = 0;
2134 const size_t num_matches =
2136 if (num_matches > 0) {
2137 for (
size_t i = 0; i < num_matches; ++i) {
2139 "Interrupted in dump section list with {0} of {1} dumped.",
2152 std::lock_guard<std::recursive_mutex> guard(
2156 "unable to find an image that matches '{0}'", arg_cstr);
2164 result.
AppendError(
"no matching executable images found");
2173 interpreter,
"target modules dump pcm-info",
2174 "Dump information about the given clang module (pcm).") {
2193 result.
AppendError(
"file must have a .pcm extension");
2202 const char *clang_args[] = {
"clang", pcm_path};
2203 clang::CompilerInstance compiler(clang::createInvocation(clang_args));
2204 compiler.setVirtualFileSystem(
2206 compiler.createDiagnostics();
2210 std::shared_ptr<llvm::raw_ostream> Out(
2212 clang::DumpModuleInfoAction dump_module_info(Out);
2214 compiler.getPCHContainerOperations()->registerReader(
2215 std::make_unique<clang::ObjectFilePCHContainerReader>());
2217 if (compiler.ExecuteAction(dump_module_info))
2222#pragma mark CommandObjectTargetModulesDumpClangAST
2231 interpreter,
"target modules dump ast",
2232 "Dump the clang ast for a given module's symbol file.",
2233 "target modules dump ast [--filter <name>] [<file1> ...]",
2234 eCommandRequiresTarget),
2236 "Dump only the decls whose names contain the specified filter "
2255 const size_t num_modules = module_list.
GetSize();
2256 if (num_modules == 0) {
2257 result.
AppendError(
"the target has no associated executable images");
2261 llvm::StringRef filter =
m_filter.GetOptionValue().GetCurrentValueAsRef();
2270 if (
SymbolFile *sf = module_sp->GetSymbolFile())
2281 const size_t num_matches =
2283 if (num_matches == 0) {
2285 std::lock_guard<std::recursive_mutex> guard(
2289 "unable to find an image that matches '{0}'", arg.c_str());
2293 for (
size_t i = 0; i < num_matches; ++i) {
2295 "Interrupted in dump clang ast list with {0} of {1} dumped.",
2309#pragma mark CommandObjectTargetModulesDumpSymfile
2318 interpreter,
"target modules dump symfile",
2319 "Dump the debug symbol file for one or more target modules.",
2321 nullptr, eCommandRequiresTarget) {}
2328 uint32_t num_dumped = 0;
2333 std::lock_guard<std::recursive_mutex> guard(target_modules.
GetMutex());
2334 const size_t num_modules = target_modules.
GetSize();
2335 if (num_modules == 0) {
2336 result.
AppendError(
"the target has no associated executable images");
2340 "Dumping debug symbols for {0} modules.\n", num_modules);
2343 "debug symbols with {0} of {1} modules dumped",
2344 num_dumped, num_modules))
2352 const char *arg_cstr;
2353 for (
int arg_idx = 0;
2357 const size_t num_matches =
2359 if (num_matches > 0) {
2360 for (
size_t i = 0; i < num_matches; ++i) {
2362 "of {1} requested modules",
2373 "unable to find an image that matches '{0}'", arg_cstr);
2380 result.
AppendError(
"no matching executable images found");
2385#pragma mark CommandObjectTargetModulesDumpLineTable
2386#define LLDB_OPTIONS_target_modules_dump
2387#include "CommandOptions.inc"
2396 interpreter,
"target modules dump line-table",
2397 "Dump the line table for one or more compilation units.", nullptr,
2398 eCommandRequiresTarget) {}
2407 uint32_t total_num_dumped = 0;
2410 result.
AppendError(
"file option must be specified");
2414 const char *arg_cstr;
2415 for (
int arg_idx = 0;
2421 std::lock_guard<std::recursive_mutex> guard(target_modules.
GetMutex());
2422 size_t num_modules = target_modules.
GetSize();
2423 if (num_modules > 0) {
2424 uint32_t num_dumped = 0;
2427 "Interrupted in dump all line tables with "
2428 "{0} of {1} dumped", num_dumped,
2439 if (num_dumped == 0)
2443 total_num_dumped += num_dumped;
2448 if (total_num_dumped > 0)
2451 result.
AppendError(
"no source filenames matched any command arguments");
2461 assert(option_idx == 0 &&
"We only have one option.");
2472 return llvm::ArrayRef(g_target_modules_dump_options);
2481#pragma mark CommandObjectTargetModulesDumpSeparateDebugInfoFiles
2482#define LLDB_OPTIONS_target_modules_dump_separate_debug_info
2483#include "CommandOptions.inc"
2493 interpreter,
"target modules dump separate-debug-info",
2494 "List the separate debug info symbol files for one or more target "
2496 nullptr, eCommandRequiresTarget) {}
2513 switch (short_option) {
2519 m_json.SetCurrentValue(
true);
2520 m_json.SetOptionWasSet();
2527 llvm_unreachable(
"Unimplemented option");
2539 return llvm::ArrayRef(g_target_modules_dump_separate_debug_info_options);
2550 uint32_t num_dumped = 0;
2556 std::lock_guard<std::recursive_mutex> guard(target_modules.
GetMutex());
2557 const size_t num_modules = target_modules.
GetSize();
2558 if (num_modules == 0) {
2559 result.
AppendError(
"the target has no associated executable images");
2565 "Interrupted in dumping all "
2566 "separate debug info with {0} of {1} modules dumped",
2567 num_dumped, num_modules))
2578 const char *arg_cstr;
2579 for (
int arg_idx = 0;
2583 const size_t num_matches =
2585 if (num_matches > 0) {
2586 for (
size_t i = 0; i < num_matches; ++i) {
2588 "Interrupted dumping {0} "
2589 "of {1} requested modules",
2600 "unable to find an image that matches '{0}'", arg_cstr);
2604 if (num_dumped > 0) {
2609 separate_debug_info_lists_by_module.
Dump(strm,
2613 separate_debug_info_lists_by_module.
ForEach(
2623 if (!separate_debug_info_list) {
2627 llvm::StringRef type;
2628 llvm::StringRef symfile;
2635 "separate-debug-info-files", files))) {
2639 strm <<
"Symbol file: " << symfile;
2641 strm <<
"Type: \"" << type <<
"\"";
2643 if (type ==
"dwo") {
2645 }
else if (type ==
"oso") {
2649 "found unsupported debug info type '{0}'", type);
2656 result.
AppendError(
"no matching executable images found");
2663#pragma mark CommandObjectTargetModulesDump
2672 interpreter,
"target modules dump",
2673 "Commands for dumping information about one or more target "
2675 "target modules dump "
2676 "[objfile|symtab|sections|ast|symfile|line-table|pcm-info|separate-"
2678 "[<file1> <file2> ...]") {
2714 "Add a new module to the current target's modules.",
2715 "target modules add [<module>]",
2716 eCommandRequiresTarget),
2719 "Fullpath to a stand alone debug "
2720 "symbols file for when debug symbols "
2721 "are not in the executable.") {
2765 "Unable to create the executable or symbol file with "
2766 "UUID %s with path %s and symbol file %s",
2771 "Unable to create the executable or symbol file with "
2772 "UUID %s with path %s",
2778 "or symbol file with UUID %s",
2787 "Unable to locate the executable or symbol file with UUID %s",
2794 "one or more executable image paths must be specified");
2798 for (
auto &entry : args.
entries()) {
2799 if (entry.ref().empty())
2817 const char *error_cstr =
error.AsCString();
2829 std::string resolved_path = file_spec.
GetPath();
2830 if (resolved_path != entry.ref()) {
2832 "invalid module path '%s' with resolved path '%s'\n",
2833 entry.ref().str().c_str(), resolved_path.c_str());
2856 interpreter,
"target modules load",
2857 "Set the load addresses for one or more sections in a target "
2859 "target modules load [--file <module> --uuid <uuid>] <sect-name> "
2860 "<address> [<sect-name> <address> ....]",
2861 eCommandRequiresTarget),
2863 "Fullpath or basename for module to load.",
""),
2865 "Write file contents to the memory.", false, true),
2867 "Set PC to the entry point."
2868 " Only applicable with '--load' option.",
2871 "Set the load address for all sections to be the "
2872 "virtual address in the file plus the offset.",
2890 const bool load =
m_load_option.GetOptionValue().GetCurrentValue();
2891 const bool set_pc =
m_pc_option.GetOptionValue().GetCurrentValue();
2895 bool search_using_module_spec =
false;
2902 if (module_list.
GetSize() == 1) {
2903 search_using_module_spec =
true;
2911 search_using_module_spec =
true;
2912 const char *arg_cstr =
m_file_option.GetOptionValue().GetCurrentValue();
2913 const bool use_global_module_list =
true;
2916 &target, arg_cstr, module_list, use_global_module_list);
2917 if (num_matches == 1) {
2920 }
else if (num_matches > 1) {
2921 search_using_module_spec =
false;
2923 "more than 1 module matched by name '%s'\n", arg_cstr);
2925 search_using_module_spec =
false;
2932 search_using_module_spec =
true;
2937 if (search_using_module_spec) {
2940 const size_t num_matches = matching_modules.
GetSize();
2943 if (num_matches == 1) {
2946 ObjectFile *objfile =
module->GetObjectFile();
2948 SectionList *section_list =
module->GetSectionList();
2950 bool changed =
false;
2955 const bool slide_is_offset =
true;
2956 module->SetLoadAddress(target, slide, slide_is_offset,
2959 result.
AppendError(
"one or more section name + load "
2960 "address pair must be specified");
2965 result.
AppendError(
"The \"--slide <offset>\" option can't "
2966 "be used in conjunction with setting "
2967 "section load addresses.\n");
2971 for (
size_t i = 0; i < argc; i += 2) {
2974 if (sect_name && load_addr_cstr) {
2977 if (llvm::to_integer(load_addr_cstr, load_addr)) {
2981 if (section_sp->IsThreadSpecific()) {
2983 "thread specific sections are not yet "
2984 "supported (section '%s')\n",
2992 "section '{0}' loaded at {1:x}", sect_name,
2997 "matches the section "
3004 "invalid load address string '%s'\n", load_addr_cstr);
3009 result.
AppendError(
"section names must be followed by "
3010 "a load address.\n");
3012 result.
AppendError(
"one or more section name + load "
3013 "address pair must be specified.\n");
3032 if (set_pc && !file_entry.
IsValid()) {
3033 result.
AppendError(
"No entry address in object file");
3036 std::vector<ObjectFile::LoadableData> loadables(
3038 if (loadables.size() == 0) {
3042 Status error = process->WriteObjectFile(std::move(loadables));
3048 ThreadList &thread_list = process->GetThreadList();
3052 if (!reg_context->SetPC(file_entry_addr)) {
3060 module->GetFileSpec().GetPath(path, sizeof(path));
3065 module->GetFileSpec().GetPath(path, sizeof(path));
3071 if (module_spec_file) {
3072 module_spec_file->
GetPath(path,
sizeof(path));
3078 std::string uuid_str;
3087 if (num_matches > 1) {
3089 "multiple modules match%s%s%s%s:\n", path[0] ?
" file=" :
"",
3090 path, !uuid_str.empty() ?
" uuid=" :
"", uuid_str.c_str());
3091 for (
size_t i = 0; i < num_matches; ++i) {
3099 "no modules were found that match%s%s%s%s.\n",
3100 path[0] ?
" file=" :
"", path, !uuid_str.empty() ?
" uuid=" :
"",
3105 result.
AppendError(
"either the \"--file <module>\" or the \"--uuid "
3106 "<uuid>\" option must be specified.\n");
3118#pragma mark CommandObjectTargetModulesList
3120#define LLDB_OPTIONS_target_modules_list
3121#include "CommandOptions.inc"
3136 if (short_option ==
'g') {
3138 }
else if (short_option ==
'a') {
3142 unsigned long width = 0;
3143 option_arg.getAsInteger(0, width);
3156 return llvm::ArrayRef(g_target_modules_list_options);
3168 interpreter,
"target modules list",
3169 "List current executable and dependent shared library images.") {
3180 const bool use_global_module_list =
m_options.m_use_global_module_list;
3197 "Couldn't find module matching address: 0x%" PRIx64
".",
3202 "Couldn't find module containing address: 0x%" PRIx64
".",
3208 size_t num_modules = 0;
3214 std::unique_lock<std::recursive_mutex> guard(
3220 if (use_global_module_list) {
3230 &target, arg.c_str(), module_list, use_global_module_list);
3231 if (num_matches == 0) {
3240 module_list_ptr = &module_list;
3243 std::unique_lock<std::recursive_mutex> lock;
3244 if (module_list_ptr !=
nullptr) {
3246 std::unique_lock<std::recursive_mutex>(module_list_ptr->
GetMutex());
3248 num_modules = module_list_ptr->
GetSize();
3251 if (num_modules > 0) {
3252 for (uint32_t image_idx = 0; image_idx < num_modules; ++image_idx) {
3255 if (module_list_ptr) {
3257 module = module_sp.get();
3259 module = Module::GetAllocatedModuleAtIndex(image_idx);
3260 module_sp =
module->shared_from_this();
3263 const size_t indent = strm.
Printf(
"[%3u] ", image_idx);
3269 if (use_global_module_list)
3271 "the global module list has no matching modules");
3273 result.
AppendError(
"the target has no matching modules");
3275 if (use_global_module_list)
3276 result.
AppendError(
"the global module list is empty");
3279 "the target has no associated executable images");
3286 if (module ==
nullptr) {
3291 bool dump_object_name =
false;
3293 m_options.m_format_array.push_back(std::make_pair(
'u', 0));
3294 m_options.m_format_array.push_back(std::make_pair(
'h', 0));
3295 m_options.m_format_array.push_back(std::make_pair(
'f', 0));
3296 m_options.m_format_array.push_back(std::make_pair(
'S', 0));
3298 const size_t num_entries =
m_options.m_format_array.size();
3299 bool print_space =
false;
3300 for (
size_t i = 0; i < num_entries; ++i) {
3304 const char format_char =
m_options.m_format_array[i].first;
3305 uint32_t width =
m_options.m_format_array[i].second;
3306 switch (format_char) {
3317 dump_object_name =
true;
3326 dump_object_name =
true;
3333 uint32_t addr_nibble_width =
3336 ObjectFile *objfile =
module->GetObjectFile();
3343 base_addr.
Dump(&strm, &target,
3347 if (format_char ==
'o') {
3349 strm.
Printf(
"0x%*.*" PRIx64, addr_nibble_width,
3354 strm.
Printf(
"0x%*.*" PRIx64, addr_nibble_width,
3355 addr_nibble_width, load_addr);
3366 strm.
Printf(
"%*s", addr_nibble_width + 2,
"");
3371 size_t ref_count = 0;
3372 char in_shared_cache =
'Y';
3374 ModuleSP module_sp(module->shared_from_this());
3376 in_shared_cache =
'N';
3379 ref_count = module_sp.use_count() - 1;
3382 strm.
Printf(
"{%c %*" PRIu64
"}", in_shared_cache, width, (uint64_t)ref_count);
3384 strm.
Printf(
"{%c %" PRIu64
"}", in_shared_cache, (uint64_t)ref_count);
3391 symbol_file->GetObjectFile()->GetFileSpec();
3392 if (format_char ==
'S') {
3394 if (!symfile_spec || symfile_spec == module->
GetFileSpec()) {
3395 print_space =
false;
3399 strm.
Printf(
"\n%*s", indent,
"");
3402 dump_object_name =
true;
3405 strm.
Printf(
"%.*s", width,
"<NONE>");
3410 llvm::AlignStyle::Left, width));
3414 strm.
Printf(
"%p",
static_cast<void *
>(module));
3425 if (dump_object_name) {
3426 const char *object_name =
module->GetObjectName().GetCString();
3428 strm.
Printf(
"(%s)", object_name);
3436#pragma mark CommandObjectTargetModulesShowUnwind
3439#define LLDB_OPTIONS_target_modules_show_unwind
3440#include "CommandOptions.inc"
3465 switch (short_option) {
3467 m_str = std::string(option_arg);
3473 "invalid address string '%s'", option_arg.str().c_str());
3478 m_str = std::string(option_arg);
3483 bool value, success;
3489 "invalid boolean value '%s' passed for -c option", option_arg);
3494 llvm_unreachable(
"Unimplemented option");
3508 return llvm::ArrayRef(g_target_modules_show_unwind_options);
3522 interpreter,
"target modules show-unwind",
3523 "Show synthesized unwind instructions for a function.", nullptr,
3524 eCommandRequiresTarget | eCommandRequiresProcess |
3525 eCommandProcessMustBeLaunched | eCommandProcessMustBePaused) {}
3537 abi = process->
GetABI().get();
3539 if (process ==
nullptr) {
3541 "You must have a process running to use this command.");
3547 result.
AppendError(
"the process must be paused to use this command");
3553 result.
AppendError(
"the process must be paused to use this command");
3565 function_options, sc_list);
3571 module_sp->ResolveSymbolContextForAddress(addr,
3572 eSymbolContextEverything, sc);
3579 "address-expression or function name option must be specified.");
3590 if (sc.symbol ==
nullptr && sc.function ==
nullptr)
3592 if (!sc.module_sp || sc.module_sp->GetObjectFile() ==
nullptr)
3594 Address addr = sc.GetFunctionOrSymbolAddress();
3604 UnwindTable &uw_table = sc.module_sp->GetUnwindTable();
3611 if (!func_unwinders_sp)
3615 "UNWIND PLANS for {0}`{1} (start addr {2:x})\n",
3616 sc.module_sp->GetPlatformFileSpec().GetFilename(), funcname,
3622 for (
size_t i = 0; i < count; i++) {
3624 if (strcmp(funcname.
GetCString(), trap_func_name) == 0)
3627 "treated as a trap handler function via user setting.\n");
3631 const std::vector<ConstString> trap_handler_names(
3632 platform_sp->GetTrapHandlerSymbolNames());
3633 for (
ConstString trap_name : trap_handler_names) {
3634 if (trap_name == funcname) {
3637 "name is listed by the platform as a trap handler.\n");
3644 if (std::shared_ptr<const UnwindPlan> plan_sp =
3645 func_unwinders_sp->GetUnwindPlanAtNonCallSite(*target, *thread)) {
3647 "Asynchronous (not restricted to call-sites) UnwindPlan is '{0}'\n",
3648 plan_sp->GetSourceName());
3650 if (std::shared_ptr<const UnwindPlan> plan_sp =
3651 func_unwinders_sp->GetUnwindPlanAtCallSite(*target, *thread)) {
3653 "Synchronous (restricted to call-sites) UnwindPlan is '{0}'\n",
3654 plan_sp->GetSourceName());
3656 if (std::shared_ptr<const UnwindPlan> plan_sp =
3657 func_unwinders_sp->GetUnwindPlanFastUnwind(*target, *thread)) {
3659 plan_sp->GetSourceName());
3664 if (std::shared_ptr<const UnwindPlan> plan_sp =
3665 func_unwinders_sp->GetAssemblyUnwindPlan(*target, *thread)) {
3667 "Assembly language inspection UnwindPlan:\n");
3673 if (std::shared_ptr<const UnwindPlan> plan_sp =
3674 func_unwinders_sp->GetObjectFileUnwindPlan(*target)) {
3681 if (std::shared_ptr<const UnwindPlan> plan_sp =
3682 func_unwinders_sp->GetObjectFileAugmentedUnwindPlan(*target,
3690 if (std::shared_ptr<const UnwindPlan> plan_sp =
3691 func_unwinders_sp->GetEHFrameUnwindPlan(*target)) {
3698 if (std::shared_ptr<const UnwindPlan> plan_sp =
3699 func_unwinders_sp->GetEHFrameAugmentedUnwindPlan(*target,
3707 if (std::shared_ptr<const UnwindPlan> plan_sp =
3708 func_unwinders_sp->GetDebugFrameUnwindPlan(*target)) {
3715 if (std::shared_ptr<const UnwindPlan> plan_sp =
3716 func_unwinders_sp->GetDebugFrameAugmentedUnwindPlan(*target,
3724 if (std::shared_ptr<const UnwindPlan> plan_sp =
3725 func_unwinders_sp->GetArmUnwindUnwindPlan(*target)) {
3732 if (std::shared_ptr<const UnwindPlan> plan_sp =
3733 func_unwinders_sp->GetSymbolFileUnwindPlan(*thread)) {
3740 if (std::shared_ptr<const UnwindPlan> plan_sp =
3741 func_unwinders_sp->GetCompactUnwindUnwindPlan(*target)) {
3748 if (std::shared_ptr<const UnwindPlan> plan_sp =
3749 func_unwinders_sp->GetUnwindPlanFastUnwind(*target, *thread)) {
3758 if (
UnwindPlanSP plan_sp = abi_sp->CreateDefaultUnwindPlan()) {
3765 if (
UnwindPlanSP plan_sp = abi_sp->CreateFunctionEntryUnwindPlan()) {
3767 "Arch default at entry point UnwindPlan:\n");
3782#define LLDB_OPTIONS_target_modules_lookup
3783#include "CommandOptions.inc"
3810 switch (short_option) {
3818 if (option_arg.getAsInteger(0,
m_offset))
3820 "invalid offset string '%s'", option_arg.str().c_str());
3824 m_str = std::string(option_arg);
3829 m_file.SetFile(option_arg, FileSpec::Style::native);
3840 "invalid line number string '%s'", option_arg.str().c_str());
3847 m_str = std::string(option_arg);
3852 m_str = std::string(option_arg);
3857 m_str = std::string(option_arg);
3877 llvm_unreachable(
"Unimplemented option");
3902 "conjunction with --verbose.");
3908 return llvm::ArrayRef(g_target_modules_lookup_options);
3929 "Look up information within executable and "
3930 "dependent shared library images.",
3931 nullptr, eCommandRequiresTarget) {
3940 bool &syntax_error) {
3958 const SymbolContext &sym_ctx(frame->GetSymbolContext(eSymbolContextModule));
3988 eSymbolContextEverything |
3990 ?
static_cast<int>(eSymbolContextVariable)
4035 m_options.m_use_regex, function_options,
4060 syntax_error =
true;
4071 bool syntax_error =
false;
4073 uint32_t num_successful_lookups = 0;
4082 num_successful_lookups++;
4092 std::lock_guard<std::recursive_mutex> guard(target_modules.
GetMutex());
4093 if (target_modules.
GetSize() == 0) {
4094 result.
AppendError(
"the target has no associated executable images");
4102 num_successful_lookups++;
4107 const char *arg_cstr;
4112 const size_t num_matches =
4114 if (num_matches > 0) {
4115 for (
size_t j = 0; j < num_matches; ++j) {
4120 num_successful_lookups++;
4126 "unable to find an image that matches '{0}'", arg_cstr);
4130 if (num_successful_lookups > 0)
4139#pragma mark CommandObjectMultiwordImageSearchPaths
4148 interpreter,
"target modules search-paths",
4149 "Commands for managing module search paths for a target.",
4150 "target modules search-paths <subcommand> [<subcommand-options>]") {
4172#pragma mark CommandObjectTargetModules
4181 "Commands for accessing information for one or "
4182 "more target modules.",
4183 "target modules <sub-command> ...") {
4217 interpreter,
"target symbols add",
4218 "Add a debug symbol file to one of the target's current modules by "
4219 "specifying a path to a debug symbols file or by using the options "
4220 "to specify a module.",
4221 "target symbols add <cmd-options> [<symfile>]",
4222 eCommandRequiresTarget),
4226 "Locate the debug symbols for the shared library specified by "
4230 "Locate the debug symbols for the currently selected frame.", false,
4233 "Locate the debug symbols for every frame in "
4234 "the current call stack.",
4257 if (!symbol_fspec) {
4259 "one or more executable image paths must be specified");
4264 symbol_fspec.
GetPath(symfile_path,
sizeof(symfile_path));
4279 if (symfile_module_specs.
GetSize() > 0) {
4285 symfile_module_spec)) {
4289 symfile_uuid_module_spec.
GetUUID() = symfile_module_spec.
GetUUID();
4295 if (matching_modules.
IsEmpty()) {
4298 const size_t num_symfile_module_specs = symfile_module_specs.
GetSize();
4300 i < num_symfile_module_specs && matching_modules.
IsEmpty(); ++i) {
4302 i, symfile_module_spec)) {
4306 symfile_uuid_module_spec.
GetUUID() =
4307 symfile_module_spec.
GetUUID();
4318 if (matching_modules.
IsEmpty())
4321 while (matching_modules.
IsEmpty()) {
4325 if (!filename_no_extension)
4337 if (matching_modules.
GetSize() > 1) {
4339 "use the --uuid option to resolve the "
4345 if (matching_modules.
GetSize() == 1) {
4351 module_sp->SetSymbolFileFileSpec(symbol_fspec);
4357 if (object_file && object_file->
GetFileSpec() == symbol_fspec) {
4359 const FileSpec &module_fs = module_sp->GetFileSpec();
4361 "symbol file '{0}' has been added to '{1}'", symfile_path,
4367 module_list.
Append(module_sp);
4372 std::list<Status> errors;
4374 for (
const auto &err : errors)
4383 module_sp->SetSymbolFileFileSpec(
FileSpec());
4388 ss_symfile_uuid <<
" (";
4390 ss_symfile_uuid <<
')';
4393 "symbol file '%s'%s does not match any existing module%s\n",
4394 symfile_path, ss_symfile_uuid.
GetData(),
4395 !llvm::sys::fs::is_regular_file(symbol_fspec.
GetPath())
4396 ?
"\n please specify the full path to the symbol file"
4423 error_strm.
PutCString(
"unable to find debug symbols for UUID ");
4442 module_spec.
GetFileSpec() = module_sp->GetFileSpec();
4444 module_spec.
GetUUID() = module_sp->GetUUID();
4453 "unable to find debug symbols for the executable file ");
4468 "a process must exist in order to use the --frame option");
4487 if (!frame_module_sp) {
4493 module_spec.
GetUUID() = frame_module_sp->GetUUID();
4495 module_spec.
GetFileSpec() = frame_module_sp->GetPlatformFileSpec();
4498 result.
AppendError(
"unable to find debug symbols for the current frame");
4511 "a process must exist in order to use the --stack option");
4528 bool symbols_found =
false;
4529 uint32_t frame_count = thread->GetStackFrameCount();
4530 for (uint32_t i = 0; i < frame_count; ++i) {
4534 frame_sp->GetSymbolContext(eSymbolContextModule).module_sp);
4535 if (!frame_module_sp)
4539 module_spec.
GetUUID() = frame_module_sp->GetUUID();
4540 module_spec.
GetFileSpec() = frame_module_sp->GetPlatformFileSpec();
4543 bool current_frame_flush =
false;
4545 symbols_found =
true;
4546 flush |= current_frame_flush;
4549 if (!symbols_found) {
4551 "unable to find debug symbols in the current call stack");
4563 const bool uuid_option_set =
4565 const bool file_option_set =
m_file_option.GetOptionValue().OptionWasSet();
4566 const bool frame_option_set =
4568 const bool stack_option_set =
4573 if (uuid_option_set)
4575 else if (file_option_set)
4577 else if (frame_option_set)
4579 else if (stack_option_set)
4582 result.
AppendError(
"one or more symbol file paths must be specified, "
4583 "or options must be specified");
4585 if (uuid_option_set) {
4586 result.
AppendError(
"specify either one or more paths to symbol files "
4587 "or use the --uuid option without arguments");
4588 }
else if (frame_option_set) {
4589 result.
AppendError(
"specify either one or more paths to symbol files "
4590 "or use the --frame option without arguments");
4591 }
else if (file_option_set && argc > 1) {
4592 result.
AppendError(
"specify at most one symbol file path when "
4593 "--shlib option is set");
4597 for (
auto &entry : args.
entries()) {
4598 if (!entry.ref().empty()) {
4600 symbol_file_spec.
SetFile(entry.ref(), FileSpec::Style::native);
4602 if (file_option_set) {
4609 ->ResolveSymbolFile(*target, module_spec, symfile_spec)
4614 bool symfile_exists =
4617 if (symfile_exists) {
4621 std::string resolved_symfile_path =
4623 if (resolved_symfile_path != entry.ref()) {
4625 "invalid module path '%s' with resolved path '%s'\n",
4626 entry.c_str(), resolved_symfile_path.c_str());
4652#pragma mark CommandObjectTargetSymbols
4661 interpreter,
"target symbols",
4662 "Commands for adding and managing debug symbol files.",
4663 "target symbols <sub-command> ...") {
4677#pragma mark CommandObjectTargetStopHookAdd
4680#define LLDB_OPTIONS_target_stop_hook_add
4681#include "CommandOptions.inc"
4693 return llvm::ArrayRef(g_target_stop_hook_add_options);
4699 const int short_option =
4700 g_target_stop_hook_add_options[option_idx].short_option;
4702 switch (short_option) {
4709 if (option_arg.getAsInteger(0,
m_line_end)) {
4711 "invalid end line number: \"%s\"", option_arg.str().c_str());
4718 bool value, success;
4724 "invalid boolean value '%s' passed for -G option",
4725 option_arg.str().c_str());
4730 "invalid start line number: \"%s\"", option_arg.str().c_str());
4759 "invalid thread id string '%s'", option_arg.str().c_str());
4776 "invalid thread index string '%s'", option_arg.str().c_str());
4786 bool value, success;
4792 "invalid boolean value '%s' passed for -F option",
4793 option_arg.str().c_str());
4797 llvm_unreachable(
"Unimplemented option");
4832 eFunctionNameTypeAuto;
4850 "Add a hook to be executed when the target stops."
4851 "The hook can either be a list of commands or an "
4852 "appropriately defined Python class. You can also "
4853 "add filters so the hook only runs a certain stop "
4855 "target stop-hook add"),
4861Command Based stop-hooks:
4862-------------------------
4863 Stop hooks can run a list of lldb commands by providing one or more
4864 --one-liner options. The commands will get run in the order they are added.
4865 Or you can provide no commands, in which case you will enter a command editor
4866 where you can enter the commands to be run.
4868Python Based Stop Hooks:
4869------------------------
4870 Stop hooks can be implemented with a suitably defined Python class, whose name
4871 is passed in the --python-class option.
4873 When the stop hook is added, the class is initialized by calling:
4875 def __init__(self, target, extra_args, internal_dict):
4877 target: The target that the stop hook is being added to.
4878 extra_args: An SBStructuredData Dictionary filled with the -key -value
4879 option pairs passed to the command.
4880 dict: An implementation detail provided by lldb.
4882 Then when the stop-hook triggers, lldb will run the 'handle_stop' method.
4883 The method has the signature:
4885 def handle_stop(self, exe_ctx, stream):
4887 exe_ctx: An SBExecutionContext for the thread that has stopped.
4888 stream: An SBStream, anything written to this stream will be printed in the
4889 the stop message when the process stops.
4891 Return Value: The method returns "should_stop". If should_stop is false
4892 from all the stop hook executions on threads that stopped
4893 with a reason, then the process will continue. Note that this
4894 will happen only after all the stop hooks are run.
4898 Stop hooks can be set to always run, or to only run when the stopped thread
4899 matches the filter options passed on the command line. The available filter
4900 options include a shared library or a thread or queue specification,
4901 a line range in a source file, a function name or a class name.
4921 "Enter your stop hook command(s). Type 'DONE' to end.\n");
4927 std::string &line)
override {
4933 locked_stream.
Printf(
"error: stop hook #%" PRIu64
4934 " aborted, no commands.\n",
4940 Target::StopHookCommandLine *hook_ptr =
4941 static_cast<Target::StopHookCommandLine *
>(
m_stop_hook_sp.get());
4946 LockedStreamFile locked_stream = output_sp->Lock();
4947 locked_stream.
Printf(
"Stop hook #%" PRIu64
" added.\n",
4956 void DoExecute(Args &command, CommandReturnObject &result)
override {
4962 Target::StopHook::StopHookKind::CommandBased
4963 : Target::StopHook::StopHookKind::ScriptBased);
4966 std::unique_ptr<SymbolContextSpecifier> specifier_up;
4968 specifier_up = std::make_unique<SymbolContextSpecifier>(
4972 specifier_up->AddSpecification(
4978 specifier_up->AddSpecification(
4984 specifier_up->AddSpecification(
m_options.m_file_name.c_str(),
4989 specifier_up->AddLineSpecification(
4995 specifier_up->AddLineSpecification(
4999 if (!
m_options.m_function_name.empty()) {
5000 specifier_up->AddSpecification(
5007 new_hook_sp->SetSpecifier(specifier_up.release());
5010 new_hook_sp->SetRunAtInitialStop(
m_options.m_at_initial_stop);
5015 ThreadSpec *thread_spec =
new ThreadSpec();
5030 new_hook_sp->SetThreadSpecifier(thread_spec);
5040 new_hook_sp->GetID());
5043 Target::StopHookScripted *hook_ptr =
5044 static_cast<Target::StopHookScripted *
>(new_hook_sp.get());
5048 if (
error.Success())
5050 new_hook_sp->GetID());
5074#pragma mark CommandObjectTargetStopHookDelete
5082 "Delete a stop-hook.",
5083 "target stop-hook delete [<idx>]") {
5086Deletes the stop hook by index.
5088At any given stop, all enabled stop hooks that pass the stop filter will
5089get a chance to run. That means if one stop-hook deletes another stop hook
5090while executing, the deleted stop hook will still fire for the stop at which
5111 if (num_args == 0) {
5119 for (
size_t i = 0; i < num_args; i++) {
5137#pragma mark CommandObjectTargetStopHookEnableDisable
5144 bool enable,
const char *name,
5145 const char *help,
const char *syntax)
5167 if (num_args == 0) {
5170 for (
size_t i = 0; i < num_args; i++) {
5192#pragma mark CommandObjectTargetStopHookList
5195#define LLDB_OPTIONS_target_stop_hook_list
5196#include "CommandOptions.inc"
5202 "List all stop-hooks.") {}
5218 switch (short_option) {
5223 llvm_unreachable(
"Unimplemented option");
5234 return llvm::ArrayRef(g_target_stop_hook_list_options);
5245 bool printed_hook =
false;
5250 printed_hook =
true;
5263#pragma mark CommandObjectMultiwordTargetStopHooks
5271 interpreter,
"target stop-hook",
5272 "Commands for operating on debugger target stop-hooks.",
5273 "target stop-hook <subcommand> [<subcommand-options>]") {
5281 interpreter,
false,
"target stop-hook disable [<id>]",
5282 "Disable a stop-hook.",
"target stop-hook disable")));
5285 interpreter,
true,
"target stop-hook enable [<id>]",
5286 "Enable a stop-hook.",
"target stop-hook enable")));
5294#pragma mark CommandObjectTargetDumpTypesystem
5301 interpreter,
"target dump typesystem",
5302 "Dump the state of the target's internal type system. Intended to "
5303 "be used for debugging LLDB itself.",
5304 nullptr, eCommandRequiresTarget) {}
5320#pragma mark CommandObjectTargetDumpSectionLoadList
5327 interpreter,
"target dump section-load-list",
5328 "Dump the state of the target's internal section load list. "
5329 "Intended to be used for debugging LLDB itself.",
5330 nullptr, eCommandRequiresTarget) {}
5342#pragma mark CommandObjectTargetDump
5350 interpreter,
"target dump",
5351 "Commands for dumping information about the target.",
5352 "target dump [typesystem|section-load-list]") {
5364#pragma mark CommandObjectTargetFrameProvider
5366#define LLDB_OPTIONS_target_frame_provider_register
5367#include "CommandOptions.inc"
5373 interpreter,
"target frame-provider register",
5374 "Register frame provider for all threads in this target.", nullptr,
5375 eCommandRequiresTarget),
5388 uint32_t index)
override {
5389 return std::string(
"");
5414 result.
SetError(id_or_err.takeError());
5419 "successfully registered scripted frame provider '{0}' for target",
5431 interpreter,
"target frame-provider clear",
5432 "Clear all registered frame providers from this target.", nullptr,
5433 eCommandRequiresTarget) {}
5455 interpreter,
"target frame-provider list",
5456 "List all registered frame providers for the target.", nullptr,
5457 eCommandRequiresTarget) {}
5468 if (descriptors.empty()) {
5469 result.
AppendMessage(
"no frame providers registered for this target.");
5475 strm << llvm::formatv(
"{0} frame provider(s) registered:\n\n",
5476 descriptors.size());
5478 for (
const auto &entry : descriptors) {
5480 descriptor.
Dump(&strm);
5492 interpreter,
"target frame-provider remove",
5493 "Remove a registered frame provider from the target by id.",
5494 "target frame-provider remove <provider-id>",
5495 eCommandRequiresTarget) {
5507 std::vector<uint32_t> removed_provider_ids;
5509 uint32_t provider_id = 0;
5510 if (!llvm::to_integer(command[i].ref(), provider_id)) {
5511 result.
AppendError(
"target frame-provider remove requires integer "
5512 "provider id argument");
5518 "no frame provider named '%u' found in target\n", provider_id);
5521 removed_provider_ids.push_back(provider_id);
5524 if (
size_t num_removed_providers = removed_provider_ids.size()) {
5526 "Successfully removed {0} frame-providers.", num_removed_providers);
5529 result.
AppendError(
"0 frame providers removed.\n");
5538 interpreter,
"target frame-provider",
5539 "Commands for registering and viewing frame providers for the "
5541 "target frame-provider [<sub-command-options>] ") {
5559#pragma mark CommandObjectMultiwordTarget
5566 "Commands for operating on debugger targets.",
5567 "target <subcommand> [<subcommand-options>]") {
static bool GetSeparateDebugInfoList(StructuredData::Array &list, Module *module, bool errors_only, bool load_all_debug_info)
static uint32_t DumpTargetList(TargetList &target_list, bool show_stopped_process_status, Stream &strm)
static void DumpModuleUUID(Stream &strm, Module *module)
static void DumpModuleSections(CommandInterpreter &interpreter, Stream &strm, Module *module)
static void DumpModuleArchitecture(Stream &strm, Module *module, bool full_triple, uint32_t width)
static bool LookupAddressInModule(CommandInterpreter &interpreter, Stream &strm, Module *module, uint32_t resolve_mask, lldb::addr_t raw_addr, lldb::addr_t offset, bool verbose, bool all_ranges)
static void DumpTargetInfo(uint32_t target_idx, Target *target, const char *prefix_cstr, bool show_stopped_process_status, Stream &strm)
static void DumpDirectory(Stream &strm, const FileSpec *file_spec_ptr, uint32_t width)
static uint32_t LookupSymbolInModule(CommandInterpreter &interpreter, Stream &strm, Module *module, const char *name, bool name_is_regex, bool verbose, bool all_ranges)
static size_t LookupTypeInModule(Target *target, CommandInterpreter &interpreter, Stream &strm, Module *module, const char *name_cstr, bool name_is_regex)
static bool DumpModuleSymbolFile(Stream &strm, Module *module)
static void DumpFullpath(Stream &strm, const FileSpec *file_spec_ptr, uint32_t width)
static void DumpDwoFilesTable(Stream &strm, StructuredData::Array &dwo_listings)
static size_t LookupFunctionInModule(CommandInterpreter &interpreter, Stream &strm, Module *module, const char *name, bool name_is_regex, const ModuleFunctionSearchOptions &options, bool verbose, bool all_ranges)
static size_t LookupTypeHere(Target *target, CommandInterpreter &interpreter, Stream &strm, Module &module, const char *name_cstr, bool name_is_regex)
static uint32_t DumpCompileUnitLineTable(CommandInterpreter &interpreter, Stream &strm, Module *module, const FileSpec &file_spec, lldb::DescriptionLevel desc_level)
static void DumpBasename(Stream &strm, const FileSpec *file_spec_ptr, uint32_t width)
static size_t DumpModuleObjfileHeaders(Stream &strm, ModuleList &module_list)
static uint32_t LookupFileAndLineInModule(CommandInterpreter &interpreter, Stream &strm, Module *module, const FileSpec &file_spec, uint32_t line, bool check_inlines, bool verbose, bool all_ranges)
static void DumpSymbolContextList(ExecutionContextScope *exe_scope, Stream &strm, const SymbolContextList &sc_list, bool verbose, bool all_ranges, std::optional< Stream::HighlightSettings > settings=std::nullopt)
static void DumpOsoFilesTable(Stream &strm, StructuredData::Array &oso_listings)
static size_t FindModulesByName(Target *target, const char *module_name, ModuleList &module_list, bool check_global_list)
static void DumpModuleSymtab(CommandInterpreter &interpreter, Stream &strm, Module *module, SortOrder sort_order, Mangled::NamePreference name_preference)
static llvm::raw_ostream & error(Stream &strm)
#define INTERRUPT_REQUESTED(debugger,...)
This handy define will keep you from having to generate a report for the interruption by hand.
#define LLDB_LOGF(log,...)
#define LLDB_SCOPED_TIMERF(...)
~CommandObjectMultiwordTargetStopHooks() override=default
CommandObjectMultiwordTargetStopHooks(CommandInterpreter &interpreter)
OptionGroupString m_label
OptionGroupPlatform m_platform_options
~CommandObjectTargetCreate() override=default
Options * GetOptions() override
OptionGroupFile m_symbol_file
OptionGroupFile m_remote_file
OptionGroupOptions m_option_group
OptionGroupArchitecture m_arch_option
CommandObjectTargetCreate(CommandInterpreter &interpreter)
OptionGroupDependents m_add_dependents
OptionGroupFile m_core_file
void DoExecute(Args &command, CommandReturnObject &result) override
OptionGroupBoolean m_cleanup_option
OptionGroupOptions m_option_group
void DoExecute(Args &args, CommandReturnObject &result) override
CommandObjectTargetDelete(CommandInterpreter &interpreter)
OptionGroupBoolean m_all_option
~CommandObjectTargetDelete() override=default
Options * GetOptions() override
Dumps the SectionLoadList of the selected Target.
void DoExecute(Args &command, CommandReturnObject &result) override
~CommandObjectTargetDumpSectionLoadList() override=default
CommandObjectTargetDumpSectionLoadList(CommandInterpreter &interpreter)
Dumps the TypeSystem of the selected Target.
CommandObjectTargetDumpTypesystem(CommandInterpreter &interpreter)
~CommandObjectTargetDumpTypesystem() override=default
void DoExecute(Args &command, CommandReturnObject &result) override
Multi-word command for 'target dump'.
CommandObjectTargetDump(CommandInterpreter &interpreter)
~CommandObjectTargetDump() override=default
void DoExecute(Args &command, CommandReturnObject &result) override
CommandObjectTargetFrameProviderClear(CommandInterpreter &interpreter)
~CommandObjectTargetFrameProviderClear() override=default
void DoExecute(Args &command, CommandReturnObject &result) override
~CommandObjectTargetFrameProviderList() override=default
CommandObjectTargetFrameProviderList(CommandInterpreter &interpreter)
OptionGroupPythonClassWithDict m_class_options
~CommandObjectTargetFrameProviderRegister() override=default
Options * GetOptions() override
OptionGroupOptions m_all_options
CommandObjectTargetFrameProviderRegister(CommandInterpreter &interpreter)
std::optional< std::string > GetRepeatCommand(Args ¤t_command_args, uint32_t index) override
Get the command that appropriate for a "repeat" of the current command.
void DoExecute(Args &command, CommandReturnObject &result) override
~CommandObjectTargetFrameProviderRemove() override=default
void DoExecute(Args &command, CommandReturnObject &result) override
CommandObjectTargetFrameProviderRemove(CommandInterpreter &interpreter)
~CommandObjectTargetFrameProvider() override=default
CommandObjectTargetFrameProvider(CommandInterpreter &interpreter)
CommandObjectTargetList(CommandInterpreter &interpreter)
void DoExecute(Args &args, CommandReturnObject &result) override
~CommandObjectTargetList() override=default
OptionGroupOptions m_option_group
OptionGroupFile m_symbol_file
CommandObjectTargetModulesAdd(CommandInterpreter &interpreter)
void DoExecute(Args &args, CommandReturnObject &result) override
OptionGroupUUID m_uuid_option_group
~CommandObjectTargetModulesAdd() override=default
Options * GetOptions() override
CommandObjectTargetModulesDumpClangAST(CommandInterpreter &interpreter)
Options * GetOptions() override
void DoExecute(Args &command, CommandReturnObject &result) override
OptionGroupString m_filter
~CommandObjectTargetModulesDumpClangAST() override=default
OptionGroupOptions m_option_group
~CommandObjectTargetModulesDumpClangPCMInfo() override=default
CommandObjectTargetModulesDumpClangPCMInfo(CommandInterpreter &interpreter)
void DoExecute(Args &command, CommandReturnObject &result) override
llvm::ArrayRef< OptionDefinition > GetDefinitions() override
Status SetOptionValue(uint32_t option_idx, llvm::StringRef option_arg, ExecutionContext *execution_context) override
Set the value of an option.
void OptionParsingStarting(ExecutionContext *execution_context) override
~CommandObjectTargetModulesDumpLineTable() override=default
Options * GetOptions() override
void DoExecute(Args &command, CommandReturnObject &result) override
CommandObjectTargetModulesDumpLineTable(CommandInterpreter &interpreter)
void DoExecute(Args &command, CommandReturnObject &result) override
~CommandObjectTargetModulesDumpObjfile() override=default
CommandObjectTargetModulesDumpObjfile(CommandInterpreter &interpreter)
CommandObjectTargetModulesDumpSections(CommandInterpreter &interpreter)
~CommandObjectTargetModulesDumpSections() override=default
void DoExecute(Args &command, CommandReturnObject &result) override
void OptionParsingStarting(ExecutionContext *execution_context) override
llvm::ArrayRef< OptionDefinition > GetDefinitions() override
~CommandOptions() override=default
OptionValueBoolean m_errors_only
Status SetOptionValue(uint32_t option_idx, llvm::StringRef option_arg, ExecutionContext *execution_context) override
Set the value of an option.
OptionValueBoolean m_json
OptionValueBoolean m_load_all_debug_info
~CommandObjectTargetModulesDumpSeparateDebugInfoFiles() override=default
CommandObjectTargetModulesDumpSeparateDebugInfoFiles(CommandInterpreter &interpreter)
void DoExecute(Args &command, CommandReturnObject &result) override
Options * GetOptions() override
CommandObjectTargetModulesDumpSymfile(CommandInterpreter &interpreter)
~CommandObjectTargetModulesDumpSymfile() override=default
void DoExecute(Args &command, CommandReturnObject &result) override
void OptionParsingStarting(ExecutionContext *execution_context) override
~CommandOptions() override=default
Status SetOptionValue(uint32_t option_idx, llvm::StringRef option_arg, ExecutionContext *execution_context) override
Set the value of an option.
llvm::ArrayRef< OptionDefinition > GetDefinitions() override
OptionValueBoolean m_prefer_mangled
Options * GetOptions() override
void DoExecute(Args &command, CommandReturnObject &result) override
CommandObjectTargetModulesDumpSymtab(CommandInterpreter &interpreter)
~CommandObjectTargetModulesDumpSymtab() override=default
~CommandObjectTargetModulesDump() override=default
CommandObjectTargetModulesDump(CommandInterpreter &interpreter)
CommandObjectTargetModulesImageSearchPaths(CommandInterpreter &interpreter)
~CommandObjectTargetModulesImageSearchPaths() override=default
bool m_use_global_module_list
llvm::ArrayRef< OptionDefinition > GetDefinitions() override
void OptionParsingStarting(ExecutionContext *execution_context) override
FormatWidthCollection m_format_array
std::vector< std::pair< char, uint32_t > > FormatWidthCollection
~CommandOptions() override=default
Status SetOptionValue(uint32_t option_idx, llvm::StringRef option_arg, ExecutionContext *execution_context) override
Set the value of an option.
lldb::addr_t m_module_addr
CommandObjectTargetModulesList(CommandInterpreter &interpreter)
~CommandObjectTargetModulesList() override=default
void DoExecute(Args &command, CommandReturnObject &result) override
void PrintModule(Target &target, Module *module, int indent, Stream &strm)
Options * GetOptions() override
OptionGroupBoolean m_pc_option
OptionGroupUInt64 m_slide_option
OptionGroupBoolean m_load_option
void DoExecute(Args &args, CommandReturnObject &result) override
Options * GetOptions() override
OptionGroupUUID m_uuid_option_group
~CommandObjectTargetModulesLoad() override=default
OptionGroupOptions m_option_group
CommandObjectTargetModulesLoad(CommandInterpreter &interpreter)
OptionGroupString m_file_option
~CommandOptions() override=default
void OptionParsingStarting(ExecutionContext *execution_context) override
Status OptionParsingFinished(ExecutionContext *execution_context) override
Status SetOptionValue(uint32_t option_idx, llvm::StringRef option_arg, ExecutionContext *execution_context) override
Set the value of an option.
llvm::ArrayRef< OptionDefinition > GetDefinitions() override
bool LookupInModule(CommandInterpreter &interpreter, Module *module, CommandReturnObject &result, bool &syntax_error)
Options * GetOptions() override
@ eLookupTypeFunctionOrSymbol
~CommandObjectTargetModulesLookup() override=default
void DoExecute(Args &command, CommandReturnObject &result) override
bool LookupHere(CommandInterpreter &interpreter, CommandReturnObject &result, bool &syntax_error)
CommandObjectTargetModulesLookup(CommandInterpreter &interpreter)
CommandObjectTargetModulesModuleAutoComplete(CommandInterpreter &interpreter, const char *name, const char *help, const char *syntax, uint32_t flags=0)
~CommandObjectTargetModulesModuleAutoComplete() override=default
void HandleArgumentCompletion(CompletionRequest &request, OptionElementVector &opt_element_vector) override
The default version handles argument definitions that have only one argument type,...
~CommandObjectTargetModulesSearchPathsAdd() override=default
void DoExecute(Args &command, CommandReturnObject &result) override
CommandObjectTargetModulesSearchPathsAdd(CommandInterpreter &interpreter)
void DoExecute(Args &command, CommandReturnObject &result) override
~CommandObjectTargetModulesSearchPathsClear() override=default
CommandObjectTargetModulesSearchPathsClear(CommandInterpreter &interpreter)
void HandleArgumentCompletion(CompletionRequest &request, OptionElementVector &opt_element_vector) override
The default version handles argument definitions that have only one argument type,...
~CommandObjectTargetModulesSearchPathsInsert() override=default
CommandObjectTargetModulesSearchPathsInsert(CommandInterpreter &interpreter)
void DoExecute(Args &command, CommandReturnObject &result) override
~CommandObjectTargetModulesSearchPathsList() override=default
CommandObjectTargetModulesSearchPathsList(CommandInterpreter &interpreter)
void DoExecute(Args &command, CommandReturnObject &result) override
~CommandObjectTargetModulesSearchPathsQuery() override=default
void DoExecute(Args &command, CommandReturnObject &result) override
CommandObjectTargetModulesSearchPathsQuery(CommandInterpreter &interpreter)
Status SetOptionValue(uint32_t option_idx, llvm::StringRef option_arg, ExecutionContext *execution_context) override
Set the value of an option.
void OptionParsingStarting(ExecutionContext *execution_context) override
~CommandOptions() override=default
llvm::ArrayRef< OptionDefinition > GetDefinitions() override
@ eLookupTypeFunctionOrSymbol
CommandObjectTargetModulesShowUnwind(CommandInterpreter &interpreter)
void DoExecute(Args &command, CommandReturnObject &result) override
Options * GetOptions() override
~CommandObjectTargetModulesShowUnwind() override=default
CommandObjectTargetModulesSourceFileAutoComplete(CommandInterpreter &interpreter, const char *name, const char *help, const char *syntax, uint32_t flags)
void HandleArgumentCompletion(CompletionRequest &request, OptionElementVector &opt_element_vector) override
The default version handles argument definitions that have only one argument type,...
~CommandObjectTargetModulesSourceFileAutoComplete() override=default
~CommandObjectTargetModules() override=default
const CommandObjectTargetModules & operator=(const CommandObjectTargetModules &)=delete
CommandObjectTargetModules(const CommandObjectTargetModules &)=delete
CommandObjectTargetModules(CommandInterpreter &interpreter)
~CommandObjectTargetSelect() override=default
void DoExecute(Args &args, CommandReturnObject &result) override
CommandObjectTargetSelect(CommandInterpreter &interpreter)
CommandObjectTargetShowLaunchEnvironment(CommandInterpreter &interpreter)
void DoExecute(Args &args, CommandReturnObject &result) override
~CommandObjectTargetShowLaunchEnvironment() override=default
uint32_t m_func_name_type_mask
Status SetOptionValue(uint32_t option_idx, llvm::StringRef option_arg, ExecutionContext *execution_context) override
llvm::ArrayRef< OptionDefinition > GetDefinitions() override
std::string m_function_name
std::vector< std::string > m_one_liner
~CommandOptions() override=default
std::string m_thread_name
void OptionParsingStarting(ExecutionContext *execution_context) override
std::string m_module_name
OptionGroupOptions m_all_options
Target::StopHookSP m_stop_hook_sp
void IOHandlerActivated(IOHandler &io_handler, bool interactive) override
CommandObjectTargetStopHookAdd(CommandInterpreter &interpreter)
void IOHandlerInputComplete(IOHandler &io_handler, std::string &line) override
Called when a line or lines have been retrieved.
~CommandObjectTargetStopHookAdd() override=default
Options * GetOptions() override
OptionGroupPythonClassWithDict m_python_class_options
void DoExecute(Args &command, CommandReturnObject &result) override
void DoExecute(Args &command, CommandReturnObject &result) override
void HandleArgumentCompletion(CompletionRequest &request, OptionElementVector &opt_element_vector) override
The default version handles argument definitions that have only one argument type,...
CommandObjectTargetStopHookDelete(CommandInterpreter &interpreter)
~CommandObjectTargetStopHookDelete() override=default
~CommandObjectTargetStopHookEnableDisable() override=default
void HandleArgumentCompletion(CompletionRequest &request, OptionElementVector &opt_element_vector) override
The default version handles argument definitions that have only one argument type,...
void DoExecute(Args &command, CommandReturnObject &result) override
CommandObjectTargetStopHookEnableDisable(CommandInterpreter &interpreter, bool enable, const char *name, const char *help, const char *syntax)
~CommandOptions() override=default
Status SetOptionValue(uint32_t option_idx, llvm::StringRef option_arg, ExecutionContext *execution_context) override
Set the value of an option.
void OptionParsingStarting(ExecutionContext *execution_context) override
llvm::ArrayRef< OptionDefinition > GetDefinitions() override
void DoExecute(Args &command, CommandReturnObject &result) override
~CommandObjectTargetStopHookList() override=default
Options * GetOptions() override
CommandObjectTargetStopHookList(CommandInterpreter &interpreter)
bool AddSymbolsForUUID(CommandReturnObject &result, bool &flush)
bool DownloadObjectAndSymbolFile(ModuleSpec &module_spec, CommandReturnObject &result, bool &flush)
bool AddSymbolsForStack(CommandReturnObject &result, bool &flush)
OptionGroupBoolean m_current_stack_option
OptionGroupBoolean m_current_frame_option
CommandObjectTargetSymbolsAdd(CommandInterpreter &interpreter)
bool AddSymbolsForFrame(CommandReturnObject &result, bool &flush)
OptionGroupOptions m_option_group
~CommandObjectTargetSymbolsAdd() override=default
Options * GetOptions() override
void DoExecute(Args &args, CommandReturnObject &result) override
OptionGroupFile m_file_option
OptionGroupUUID m_uuid_option_group
bool AddModuleSymbols(Target *target, ModuleSpec &module_spec, bool &flush, CommandReturnObject &result)
bool AddSymbolsForFile(CommandReturnObject &result, bool &flush)
const CommandObjectTargetSymbols & operator=(const CommandObjectTargetSymbols &)=delete
CommandObjectTargetSymbols(CommandInterpreter &interpreter)
~CommandObjectTargetSymbols() override=default
CommandObjectTargetSymbols(const CommandObjectTargetSymbols &)=delete
OptionGroupFormat m_option_format
void DumpGlobalVariableList(const ExecutionContext &exe_ctx, const SymbolContext &sc, const VariableList &variable_list, CommandReturnObject &result)
void DumpValueObject(Stream &s, VariableSP &var_sp, ValueObjectSP &valobj_sp, const char *root_name)
static size_t GetVariableCallback(void *baton, const char *name, VariableList &variable_list)
static const uint32_t SHORT_OPTION_SHLB
CommandObjectTargetVariable(CommandInterpreter &interpreter)
OptionGroupFileList m_option_shared_libraries
void DoExecute(Args &args, CommandReturnObject &result) override
Options * GetOptions() override
OptionGroupFileList m_option_compile_units
static const uint32_t SHORT_OPTION_FILE
OptionGroupVariable m_option_variable
OptionGroupValueObjectDisplay m_varobj_options
OptionGroupOptions m_option_group
~CommandObjectTargetVariable() override=default
~OptionGroupDependents() override=default
OptionGroupDependents()=default
LoadDependentFiles m_load_dependent_files
OptionGroupDependents(const OptionGroupDependents &)=delete
const OptionGroupDependents & operator=(const OptionGroupDependents &)=delete
void OptionParsingStarting(ExecutionContext *execution_context) override
Status SetOptionValue(uint32_t, const char *, ExecutionContext *)=delete
Status SetOptionValue(uint32_t option_idx, llvm::StringRef option_value, ExecutionContext *execution_context) override
llvm::ArrayRef< OptionDefinition > GetDefinitions() override
virtual lldb::addr_t FixCodeAddress(lldb::addr_t pc)
Some targets might use bits in a code address to indicate a mode switch.
A section + offset based address class.
lldb::addr_t GetLoadAddress(Target *target) const
Get the load address.
bool SetLoadAddress(lldb::addr_t load_addr, Target *target, bool allow_section_end=false)
Set the address to represent load_addr.
@ DumpStyleFileAddress
Display as the file address (if any).
@ DumpStyleSectionNameOffset
Display as the section name + offset.
@ DumpStyleDetailedSymbolContext
Detailed symbol context information for an address for all symbol context members.
@ DumpStyleInvalid
Invalid dump style.
@ DumpStyleModuleWithFileAddress
Display as the file address with the module name prepended (if any).
@ DumpStyleResolvedDescription
Display the details about what an address resolves to.
bool Dump(Stream *s, ExecutionContextScope *exe_scope, DumpStyle style, DumpStyle fallback_style=DumpStyleInvalid, uint32_t addr_byte_size=UINT32_MAX, bool all_ranges=false, std::optional< Stream::HighlightSettings > settings=std::nullopt) const
Dump a description of this object to a Stream.
lldb::ModuleSP GetModule() const
Get accessor for the module for this address.
lldb::addr_t GetFileAddress() const
Get the file address.
bool IsValid() const
Check if the object state is valid.
An architecture specification class.
uint32_t GetAddressByteSize() const
Returns the size in bytes of an address of the current architecture.
bool IsValid() const
Tests if this ArchSpec is valid.
void DumpTriple(llvm::raw_ostream &s) const
const char * GetArchitectureName() const
Returns a static string representing the current architecture.
A command line argument class.
void Shift()
Shifts the first argument C string value of the array off the argument array.
size_t GetArgumentCount() const
Gets the number of arguments left in this command object.
llvm::ArrayRef< ArgEntry > entries() const
const char * GetArgumentAtIndex(size_t idx) const
Gets the NULL terminated C string argument pointer for the argument at index idx.
static bool InvokeCommonCompletionCallbacks(CommandInterpreter &interpreter, uint32_t completion_mask, lldb_private::CompletionRequest &request, SearchFilter *searcher)
bool Confirm(llvm::StringRef message, bool default_answer)
ExecutionContext GetExecutionContext() const
CommandObjectMultiwordTarget(CommandInterpreter &interpreter)
~CommandObjectMultiwordTarget() override
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)
std::vector< CommandArgumentData > CommandArgumentEntry
virtual void SetHelpLong(llvm::StringRef str)
void AddSimpleArgumentList(lldb::CommandArgumentType arg_type, ArgumentRepetitionType repetition_type=eArgRepeatPlain)
ExecutionContext m_exe_ctx
std::vector< CommandArgumentEntry > m_arguments
CommandInterpreter & GetCommandInterpreter()
CommandInterpreter & m_interpreter
virtual void HandleArgumentCompletion(CompletionRequest &request, OptionElementVector &opt_element_vector)
The default version handles argument definitions that have only one argument type,...
void AppendMessage(llvm::StringRef in_string)
void AppendError(llvm::StringRef in_string)
const ValueObjectList & GetValueObjectList() const
void AppendWarningWithFormatv(const char *format, Args &&...args)
Stream & GetErrorStream()
void SetStatus(lldb::ReturnStatus status)
void SetError(Status error)
void AppendErrorWithFormat(const char *format,...) __attribute__((format(printf
void void AppendMessageWithFormatv(const char *format, Args &&...args)
void AppendWarning(llvm::StringRef in_string)
void AppendErrorWithFormatv(const char *format, Args &&...args)
Stream & GetOutputStream()
A class that describes a compilation unit.
lldb::VariableListSP GetVariableList(bool can_create)
Get the variable list for a compile unit.
const FileSpec & GetPrimaryFile() const
Return the primary source spec associated with this compile unit.
"lldb/Utility/ArgCompletionRequest.h"
void TryCompleteCurrentArg(llvm::StringRef completion, llvm::StringRef description="")
Adds a possible completion string if the completion would complete the current argument.
size_t GetCursorIndex() const
A uniqued constant string class.
void Dump(Stream *s, const char *value_if_empty=nullptr) const
Dump the object description to a stream.
bool IsEmpty() const
Test for empty string.
llvm::StringRef GetStringRef() const
Get the string value as a llvm::StringRef.
const char * GetCString() const
Get the string value as a C string.
const char * AsCString(const char *value_if_empty) const
Get the string value as a C string.
A class to manage flag bits.
TargetList & GetTargetList()
Get accessor for the target list.
llvm::StringRef GetRegexMatchAnsiSuffix() const
Target & GetDummyTarget()
llvm::StringRef GetRegexMatchAnsiPrefix() const
ScriptInterpreter * GetScriptInterpreter(bool can_create=true, std::optional< lldb::ScriptLanguage > language={})
DumpValueObjectOptions & SetRootValueObjectName(const char *name=nullptr)
DumpValueObjectOptions & SetFormat(lldb::Format format=lldb::eFormatDefault)
A class that measures elapsed time in an exception safe way.
"lldb/Target/ExecutionContextScope.h" Inherit from this if your object can reconstruct its execution ...
"lldb/Target/ExecutionContext.h" A class that contains an execution context.
ExecutionContextScope * GetBestExecutionContextScope() const
Target * GetTargetPtr() const
Returns a pointer to the target object.
const FileSpec & GetFileSpecAtIndex(size_t idx) const
Get file at index.
size_t GetSize() const
Get the number of files in the file list.
void SetFile(llvm::StringRef path, Style style)
Change the file specified with a new path.
void SetDirectory(ConstString directory)
Directory string set accessor.
const ConstString & GetFilename() const
Filename string const get accessor.
const ConstString & GetDirectory() const
Directory string const get accessor.
ConstString GetFileNameStrippingExtension() const
Return the filename without the extension part.
size_t GetPath(char *path, size_t max_path_length, bool denormalize=true) const
Extract the full path to the file.
void Dump(llvm::raw_ostream &s) const
Dump this object to a Stream.
llvm::StringRef GetFileNameExtension() const
Extract the extension of the file.
void SetFilename(ConstString filename)
Filename string set accessor.
bool ResolveExecutableLocation(FileSpec &file_spec)
Call into the Host to see if it can help find the file.
bool Exists(const FileSpec &file_spec) const
Returns whether the given file exists.
int Open(const char *path, int flags, int mode=0600)
Wraps open in a platform-independent way.
static FileSystem & Instance()
void Resolve(llvm::SmallVectorImpl< char > &path, bool force_make_absolute=false)
Resolve path to make it canonical.
IOHandlerDelegateMultiline(llvm::StringRef end_line, Completion completion=Completion::None)
A delegate class for use with IOHandler subclasses.
lldb::LockableStreamFileSP GetErrorStreamFileSP()
lldb::LockableStreamFileSP GetOutputStreamFileSP()
void GetDescription(Stream *s, Target *target, lldb::DescriptionLevel level)
A collection class for Module objects.
void FindFunctions(ConstString name, lldb::FunctionNameType name_type_mask, const ModuleFunctionSearchOptions &options, SymbolContextList &sc_list) const
ModuleIterableNoLocking ModulesNoLocking() const
static bool ModuleIsInCache(const Module *module_ptr)
void FindGlobalVariables(ConstString name, size_t max_matches, VariableList &variable_list) const
Find global and static variables by name.
std::recursive_mutex & GetMutex() const
lldb::ModuleSP FindFirstModule(const ModuleSpec &module_spec) const
Finds the first module whose file specification matches module_spec.
lldb::ModuleSP GetModuleAtIndexUnlocked(size_t idx) const
Get the module shared pointer for the module at index idx without acquiring the ModuleList mutex.
void FindCompileUnits(const FileSpec &path, SymbolContextList &sc_list) const
Find compile units by partial or full path.
bool AppendIfNeeded(const lldb::ModuleSP &new_module, bool notify=true)
Append a module to the module list, if it is not already there.
Module * GetModulePointerAtIndex(size_t idx) const
Get the module pointer for the module at index idx.
void FindModules(const ModuleSpec &module_spec, ModuleList &matching_module_list) const
Finds modules whose file specification matches module_spec.
lldb::ModuleSP GetModuleAtIndex(size_t idx) const
Get the module shared pointer for the module at index idx.
void Append(const lldb::ModuleSP &module_sp, bool notify=true)
Append a module to the module list.
static size_t RemoveOrphanSharedModules(bool mandatory)
static void FindSharedModules(const ModuleSpec &module_spec, ModuleList &matching_module_list)
bool LoadScriptingResourcesInTarget(Target *target, std::list< Status > &errors, bool continue_on_error=true)
ModuleIterable Modules() const
size_t GetSize() const
Gets the size of the module list.
bool GetModuleSpecAtIndex(size_t i, ModuleSpec &module_spec) const
bool FindMatchingModuleSpec(const ModuleSpec &module_spec, ModuleSpec &match_module_spec) const
FileSpec & GetPlatformFileSpec()
ArchSpec & GetArchitecture()
FileSpec * GetFileSpecPtr()
FileSpec & GetSymbolFileSpec()
A class that describes an executable image and its associated object and symbol files.
const lldb_private::UUID & GetUUID()
Get a reference to the UUID value contained in this object.
virtual SymbolFile * GetSymbolFile(bool can_create=true, Stream *feedback_strm=nullptr)
Get the module's symbol file.
static Module * GetAllocatedModuleAtIndex(size_t idx)
static std::recursive_mutex & GetAllocationModuleCollectionMutex()
bool ResolveFileAddress(lldb::addr_t vm_addr, Address &so_addr)
Symtab * GetSymtab(bool can_create=true)
Get the module's symbol table.
bool MatchesModuleSpec(const ModuleSpec &module_ref)
static size_t GetNumberAllocatedModules()
const ArchSpec & GetArchitecture() const
Get const accessor for the module architecture.
std::string GetSpecificationDescription() const
Get the module path and object name.
const FileSpec & GetFileSpec() const
Get const accessor for the module file specification.
const llvm::sys::TimePoint & GetModificationTime() const
A plug-in interface definition class for object file parsers.
virtual void Dump(Stream *s)=0
Dump a description of this object to a Stream.
virtual std::vector< LoadableData > GetLoadableData(Target &target)
Loads this objfile to memory.
virtual lldb_private::Address GetEntryPointAddress()
Returns the address of the Entry Point in this object file - if the object file doesn't have an entry...
virtual FileSpec & GetFileSpec()
Get accessor to the object file specification.
static ModuleSpecList GetModuleSpecifications(const FileSpec &file, lldb::offset_t file_offset, lldb::offset_t file_size, lldb::DataExtractorSP=lldb::DataExtractorSP())
virtual lldb_private::Address GetBaseAddress()
Returns base address of this object file.
A command line option parsing protocol class.
std::vector< Option > m_getopt_table
void Insert(llvm::StringRef path, llvm::StringRef replacement, uint32_t insert_idx, bool notify)
void Append(llvm::StringRef path, llvm::StringRef replacement, bool notify)
bool RemapPath(ConstString path, ConstString &new_path) const
bool GetPathsAtIndex(uint32_t idx, ConstString &path, ConstString &new_path) const
void Dump(Stream *s, int pair_index=-1)
static bool DownloadObjectAndSymbolFile(ModuleSpec &module_spec, Status &error, bool force_lookup=true, bool copy_executable=true)
void SetExecutableFile(const FileSpec &exe_file, bool add_exe_file_as_first_arg)
A plug-in interface definition class for debugging a process.
ThreadList & GetThreadList()
void Flush()
Flush all data in the process.
lldb::StateType GetState()
Get accessor for the current process state.
const lldb::ABISP & GetABI()
bool IsValid() const
Test if this object contains a valid regular expression.
virtual lldb::ScriptedFrameProviderInterfaceSP CreateScriptedFrameProviderInterface()
lldb::SectionSP FindSectionByName(ConstString section_dstr) const
void Dump(llvm::raw_ostream &s, unsigned indent, Target *target, bool show_header, uint32_t depth) const
This base class provides an interface to stack frames.
virtual const SymbolContext & GetSymbolContext(lldb::SymbolContextItem resolve_scope)
Provide a SymbolContext for this StackFrame's current pc value.
virtual uint32_t GetFrameIndex() const
Query this frame to find what frame it is in this Thread's StackFrameList.
static Status FromErrorStringWithFormat(const char *format,...) __attribute__((format(printf
static Status FromErrorString(const char *str)
bool Fail() const
Test for error condition.
const char * AsCString(const char *default_error_str="unknown error") const
Get the error string associated with the current error.
static Status static Status FromErrorStringWithFormatv(const char *format, Args &&...args)
const char * GetData() const
llvm::StringRef GetString() const
A stream class that can stream formatted output to a file.
void Format(const char *format, Args &&... args)
Forwards the arguments to llvm::formatv and writes to the stream.
llvm::raw_ostream & AsRawOstream()
Returns a raw_ostream that forwards the data to this Stream object.
size_t Indent(llvm::StringRef s="")
Indent the current line in the stream.
size_t Printf(const char *format,...) __attribute__((format(printf
Output printf formatted output to the stream.
size_t PutCString(llvm::StringRef cstr)
Output a C string to the stream.
void SetIndentLevel(unsigned level)
Set the current indentation level.
void PutCStringColorHighlighted(llvm::StringRef text, std::optional< HighlightSettings > settings=std::nullopt)
Output a C string to the stream with color highlighting.
size_t EOL()
Output and End of Line character to the stream.
void IndentLess(unsigned amount=2)
Decrement the current indentation level.
void IndentMore(unsigned amount=2)
Increment the current indentation level.
unsigned GetIndentLevel() const
Get the current indentation level.
void AddItem(const ObjectSP &item)
bool ForEach(std::function< bool(Object *object)> const &foreach_callback) const
bool GetValueForKeyAsInteger(llvm::StringRef key, IntType &result) const
bool GetValueForKeyAsString(llvm::StringRef key, llvm::StringRef &result) const
bool GetValueForKeyAsArray(llvm::StringRef key, Array *&result) const
Dictionary * GetAsDictionary()
void Dump(lldb_private::Stream &s, bool pretty_print=true) const
Defines a list of symbol context objects.
uint32_t GetSize() const
Get accessor for a symbol context list size.
void Append(const SymbolContext &sc)
Append a new symbol context to the list.
@ eClassOrNamespaceSpecified
Defines a symbol context baton that can be handed other debug core functions.
Function * function
The Function for a given query.
void SortTypeList(TypeMap &type_map, TypeList &type_list) const
Sorts the types in TypeMap according to SymbolContext to TypeList.
lldb::ModuleSP module_sp
The Module for a given query.
CompileUnit * comp_unit
The CompileUnit for a given query.
Symbol * symbol
The Symbol for a given query.
Provides public interface for all SymbolFiles.
virtual ObjectFile * GetObjectFile()=0
bool ValueIsAddress() const
bool GetByteSizeIsValid() const
Address & GetAddressRef()
lldb::addr_t GetByteSize() const
ConstString GetDisplayName() const
uint64_t GetRawValue() const
Get the raw value of the symbol from the symbol table.
Symbol * SymbolAtIndex(size_t idx)
uint32_t AppendSymbolIndexesWithName(ConstString symbol_name, std::vector< uint32_t > &matches)
uint32_t AppendSymbolIndexesMatchingRegExAndType(const RegularExpression ®ex, lldb::SymbolType symbol_type, std::vector< uint32_t > &indexes, Mangled::NamePreference name_preference=Mangled::ePreferDemangled)
lldb::TargetSP GetTargetAtIndex(uint32_t index) const
Status CreateTarget(Debugger &debugger, llvm::StringRef user_exe_path, llvm::StringRef triple_str, LoadDependentFiles get_dependent_modules, const OptionGroupPlatform *platform_options, lldb::TargetSP &target_sp)
Create a new Target.
void SetSelectedTarget(uint32_t index)
bool DeleteTarget(lldb::TargetSP &target_sp)
Delete a Target object from the list.
lldb::TargetSP GetSelectedTarget()
size_t GetNumTargets() const
bool GetUserSpecifiedTrapHandlerNames(Args &args) const
Environment GetEnvironment() const
void SetActionFromString(const std::string &strings)
void SetActionFromStrings(const std::vector< std::string > &strings)
Status SetScriptCallback(std::string class_name, StructuredData::ObjectSP extra_args_sp)
void ModulesDidLoad(ModuleList &module_list)
This call may preload module symbols, and may do so in parallel depending on the following target set...
llvm::Expected< uint32_t > AddScriptedFrameProviderDescriptor(const ScriptedFrameProviderDescriptor &descriptor)
Add or update a scripted frame provider descriptor for this target.
Module * GetExecutableModulePointer()
PathMappingList & GetImageSearchPathList()
std::shared_ptr< StopHook > StopHookSP
void SymbolsDidLoad(ModuleList &module_list)
const std::vector< StopHookSP > GetStopHooks(bool internal=false) const
const llvm::MapVector< uint32_t, ScriptedFrameProviderDescriptor > & GetScriptedFrameProviderDescriptors() const
Get all scripted frame provider descriptors for this target.
bool RemoveScriptedFrameProviderDescriptor(uint32_t id)
Remove a scripted frame provider descriptor by id.
void DumpSectionLoadList(Stream &s)
const lldb::ProcessSP & GetProcessSP() const
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...
void UndoCreateStopHook(lldb::user_id_t uid)
If you tried to create a stop hook, and that failed, call this to remove the stop hook,...
bool ResolveLoadAddress(lldb::addr_t load_addr, Address &so_addr, uint32_t stop_id=SectionLoadHistory::eStopIDNow, bool allow_section_end=false)
bool SetStopHookActiveStateByID(lldb::user_id_t uid, bool active_state)
void SetAllStopHooksActiveState(bool active_state)
StopHookSP CreateStopHook(StopHook::StopHookKind kind, bool internal=false)
Add an empty stop hook to the Target's stop hook list, and returns a shared pointer to the new hook.
void RemoveAllStopHooks()
lldb::PlatformSP GetPlatform()
const ModuleList & GetImages() const
Get accessor for the images for this process.
const ArchSpec & GetArchitecture() const
const std::string & GetLabel() const
void ClearScriptedFrameProviderDescriptors()
Clear all scripted frame provider descriptors for this target.
lldb::ProcessSP CalculateProcess() override
bool SetSectionLoadAddress(const lldb::SectionSP §ion, lldb::addr_t load_addr, bool warn_multiple=false)
bool RemoveStopHookByID(lldb::user_id_t uid)
lldb::ThreadSP GetSelectedThread()
uint32_t GetSize(bool can_update=true)
lldb::ThreadSP GetThreadAtIndex(uint32_t idx, bool can_update=true)
void SetIndex(uint32_t index)
void SetName(llvm::StringRef name)
void SetTID(lldb::tid_t tid)
void SetQueueName(llvm::StringRef queue_name)
lldb::TypeSP GetTypeAtIndex(uint32_t idx)
A class that contains all state required for type lookups.
This class tracks the state and results of a TypeQuery.
void Dump(Stream &s) const
std::string GetAsString(llvm::StringRef separator="-") const
lldb::FuncUnwindersSP GetFuncUnwindersContainingAddress(const Address &addr, const SymbolContext &sc)
lldb::FuncUnwindersSP GetUncachedFuncUnwindersContainingAddress(const Address &addr, const SymbolContext &sc)
A collection of ValueObject values that.
void Append(const lldb::ValueObjectSP &val_obj_sp)
lldb::ValueObjectSP GetValueObjectAtIndex(size_t idx)
static lldb::ValueObjectSP Create(ExecutionContextScope *exe_scope, const lldb::VariableSP &var_sp)
lldb::VariableSP GetVariableAtIndex(size_t idx) const
static Status GetValuesForVariableExpressionPath(llvm::StringRef variable_expr_path, ExecutionContextScope *scope, GetVariableCallback callback, void *baton, VariableList &variable_list, ValueObjectList &valobj_list)
#define LLDB_OPT_SET_FROM_TO(A, B)
#define LLDB_INVALID_LINE_NUMBER
#define LLDB_INVALID_THREAD_ID
#define LLDB_INVALID_INDEX32
#define LLDB_INVALID_ADDRESS
#define LLDB_INVALID_PROCESS_ID
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.
std::vector< OptionArgElement > OptionElementVector
bool StateIsStoppedState(lldb::StateType state, bool must_exist)
Check if a state represents a state where the process or thread is stopped.
void DumpAddress(llvm::raw_ostream &s, uint64_t addr, uint32_t addr_size, const char *prefix=nullptr, const char *suffix=nullptr)
Output an address value to this stream.
const char * StateAsCString(lldb::StateType state)
Converts a StateType to a C string.
std::string toString(FormatterBytecode::OpCodes op)
std::shared_ptr< lldb_private::TypeSystem > TypeSystemSP
std::shared_ptr< lldb_private::ABI > ABISP
std::shared_ptr< lldb_private::StackFrame > StackFrameSP
DescriptionLevel
Description levels for "void GetDescription(Stream *, DescriptionLevel)" calls.
std::shared_ptr< lldb_private::Thread > ThreadSP
std::shared_ptr< lldb_private::ScriptedMetadata > ScriptedMetadataSP
std::shared_ptr< lldb_private::CommandObject > CommandObjectSP
std::shared_ptr< lldb_private::ValueObject > ValueObjectSP
Format
Display format definitions.
std::shared_ptr< lldb_private::Platform > PlatformSP
StateType
Process and Thread States.
std::shared_ptr< lldb_private::FuncUnwinders > FuncUnwindersSP
std::shared_ptr< lldb_private::Type > TypeSP
std::shared_ptr< lldb_private::Process > ProcessSP
@ eReturnStatusSuccessFinishResult
@ eReturnStatusSuccessFinishNoResult
@ eArgTypeUnsignedInteger
std::shared_ptr< lldb_private::VariableList > VariableListSP
std::shared_ptr< lldb_private::UnwindPlan > UnwindPlanSP
std::shared_ptr< lldb_private::Variable > VariableSP
std::shared_ptr< lldb_private::ScriptedFrameProviderInterface > ScriptedFrameProviderInterfaceSP
std::shared_ptr< lldb_private::LockableStreamFile > LockableStreamFileSP
std::shared_ptr< lldb_private::Section > SectionSP
std::shared_ptr< lldb_private::Target > TargetSP
std::shared_ptr< lldb_private::RegisterContext > RegisterContextSP
std::shared_ptr< lldb_private::Module > ModuleSP
@ eValueTypeVariableGlobal
globals variable
@ eValueTypeVariableLocal
function local variables
@ eValueTypeVariableArgument
function argument variables
@ eValueTypeVariableStatic
static variable
@ eValueTypeVariableThreadLocal
thread local storage variable
Used to build individual command argument lists.
ArgumentRepetitionType arg_repetition
lldb::CommandArgumentType arg_type
Options used by Module::FindFunctions.
bool include_inlines
Include inlined functions.
bool include_symbols
Include the symbol table.
static int64_t ToOptionEnum(llvm::StringRef s, const OptionEnumValues &enum_values, int32_t fail_value, Status &error)
static lldb::addr_t ToAddress(const ExecutionContext *exe_ctx, llvm::StringRef s, lldb::addr_t fail_value, Status *error_ptr)
Try to parse an address.
static bool ToBoolean(llvm::StringRef s, bool fail_value, bool *success_ptr)
This struct contains the metadata needed to instantiate a frame provider and optional filters to cont...
void Dump(Stream *s) const
Dump a description of this descriptor to the given stream.
lldb::ScriptedFrameProviderInterfaceSP interface_sp
Interface for calling static methods on the provider class.
Struct to store information for color highlighting in the stream.