38#include "llvm/Support/FormatAdapters.h" 
   40#include "llvm/ADT/ScopeExit.h" 
   51                                     const char *name, 
const char *help,
 
   52                                     const char *syntax, uint32_t flags,
 
   53                                     const char *new_process_action)
 
 
   70              llvm::formatv(
"There is a pending attach, abort it and {0}?",
 
   73          message = llvm::formatv(
 
   74              "There is a running process, detach from it and {0}?",
 
   78              llvm::formatv(
"There is a running process, kill it and {0}?",
 
   86            bool keep_stopped = 
false;
 
   93                  "Failed to detach from process: %s\n",
 
 
 
  116#pragma mark CommandObjectProcessLaunch 
  121            interpreter, 
"process launch",
 
  122            "Launch the executable in the debugger. If no run-args are " 
  123            "specified, the arguments from target.run-args are used.",
 
  124            nullptr, eCommandRequiresTarget, 
"restart"),
 
 
  140                                              uint32_t index)
 override {
 
  142    return std::string(
"");
 
 
  158      result.
AppendError(
"no file in target, create a debug target using the " 
  159                         "'target create' command");
 
  173    bool disable_aslr = 
false;
 
  185      m_options.launch_info.SetProcessPluginName(
"ScriptedProcess");
 
  188      m_options.launch_info.SetScriptedMetadata(metadata_sp);
 
  193      m_options.launch_info.GetFlags().Set(eLaunchFlagDisableASLR);
 
  195      m_options.launch_info.GetFlags().Clear(eLaunchFlagDisableASLR);
 
  198      m_options.launch_info.GetFlags().Set(eLaunchFlagInheritTCCFromParent);
 
  201      m_options.launch_info.GetFlags().Set(eLaunchFlagDetachOnError);
 
  204      m_options.launch_info.GetFlags().Set(eLaunchFlagDisableSTDIO);
 
  206    if (!
m_options.launch_info.GetWorkingDirectory()) {
 
  215    m_options.launch_info.GetEnvironment().insert(target_env.begin(),
 
  218    llvm::StringRef target_settings_argv0 = target->
GetArg0();
 
  220    if (!target_settings_argv0.empty()) {
 
  221      m_options.launch_info.GetArguments().AppendArgument(
 
  222          target_settings_argv0);
 
  225            exe_module_sp->GetPlatformFileSpec(), 
false);
 
  231            exe_module_sp->GetPlatformFileSpec(), 
true);
 
  237      m_options.launch_info.GetArguments().AppendArguments(
 
  240      m_options.launch_info.GetArguments().AppendArguments(launch_args);
 
  248    if (
error.Success()) {
 
  255        process_sp->SyncIOHandler(0, std::chrono::seconds(2));
 
  261        if (!exe_module_sp) {
 
  262          result.
AppendWarning(
"could not get executable module after launch");
 
  265          const char *archname =
 
  266              exe_module_sp->GetArchitecture().GetArchitectureName();
 
  268              "Process %" PRIu64 
" launched: '%s' (%s)\n", process_sp->GetID(),
 
  269              exe_module_sp->GetFileSpec().GetPath().c_str(), archname);
 
  274        llvm::StringRef data = stream.
GetString();
 
  280            "no error returned from Target::Launch, and target has no process");
 
 
 
  292#define LLDB_OPTIONS_process_attach 
  293#include "CommandOptions.inc" 
  295#pragma mark CommandObjectProcessAttach 
  300            interpreter, 
"process attach", 
"Attach to a process.",
 
  301            "process attach <cmd-options>", 0, 
"attach"),
 
 
  316        GetDebugger().GetPlatformList().GetSelectedPlatform());
 
  330    if (target == 
nullptr) {
 
  339      target = new_target_sp.get();
 
  340      if (target == 
nullptr || 
error.Fail()) {
 
  347      m_options.attach_info.SetProcessPluginName(
"ScriptedProcess");
 
  350      m_options.attach_info.SetScriptedMetadata(metadata_sp);
 
  363    if (
error.Success()) {
 
  371            "no error returned from Target::Attach, and target has no process");
 
  383    if (!old_exec_module_sp) {
 
  385      if (new_exec_module_sp) {
 
  387            "Executable binary set to \"%s\".\n",
 
  388            new_exec_module_sp->GetFileSpec().GetPath().c_str());
 
  390    } 
else if (!new_exec_module_sp) {
 
  392    } 
else if (old_exec_module_sp->GetFileSpec() !=
 
  393               new_exec_module_sp->GetFileSpec()) {
 
  396          "Executable binary changed from \"%s\" to \"%s\".\n",
 
  397          old_exec_module_sp->GetFileSpec().GetPath().c_str(),
 
  398          new_exec_module_sp->GetFileSpec().GetPath().c_str());
 
  401    if (!old_arch_spec.
IsValid()) {
 
  403          "Architecture set to: %s.\n",
 
  407          "Architecture changed from %s to %s.\n",
 
  408          old_arch_spec.
GetTriple().getTriple().c_str(),
 
  414    if (
m_options.attach_info.GetContinueOnceAttached()) {
 
 
 
  430#define LLDB_OPTIONS_process_continue 
  431#include "CommandOptions.inc" 
  433#pragma mark CommandObjectProcessContinue 
  439            interpreter, 
"process continue",
 
  440            "Continue execution of all threads in the current process.",
 
  442            eCommandRequiresProcess | eCommandTryTargetAPILock |
 
  443                eCommandProcessMustBeLaunched | eCommandProcessMustBePaused) {}
 
 
  462      switch (short_option) {
 
  464        if (option_arg.getAsInteger(0, 
m_ignore))
 
  466              "invalid value for ignore option: \"%s\", should be a number.",
 
  467              option_arg.str().c_str());
 
  480        llvm_unreachable(
"Unimplemented option");
 
 
  493      return llvm::ArrayRef(g_process_continue_options);
 
 
 
  510          StopInfoSP stop_info_sp = sel_thread_sp->GetStopInfo();
 
  518              const size_t num_owners = bp_site_sp->GetNumberOfConstituents();
 
  519              for (
size_t i = 0; i < num_owners; i++) {
 
  521                    bp_site_sp->GetConstituentAtIndex(i)->GetBreakpoint();
 
  535      if (
m_options.m_run_to_bkpt_args.GetArgumentCount() > 0)
 
  537            m_options.m_run_to_bkpt_args, target, result, &run_to_bkpt_ids,
 
  544        result.
AppendError(
"continue-to breakpoints did not specify any actual " 
  545                           "breakpoints or locations");
 
  551      size_t num_run_to_bkpt_ids = run_to_bkpt_ids.
GetSize();
 
  552      std::vector<break_id_t> bkpts_disabled;
 
  553      std::vector<BreakpointID> locs_disabled;
 
  554      if (num_run_to_bkpt_ids != 0) {
 
  560        std::unordered_set<break_id_t> bkpts_seen;
 
  561        std::unordered_set<break_id_t> bkpts_with_locs_seen;
 
  563        bool any_enabled = 
false;
 
  565        for (
size_t idx = 0; idx < num_run_to_bkpt_ids; idx++) {
 
  573          if (bp_sp->IsEnabled()) {
 
  577              size_t num_locations = bp_sp->GetNumLocations();
 
  578              for (
size_t loc_idx = 0; loc_idx < num_locations; loc_idx++) {
 
  580                    = bp_sp->GetLocationAtIndex(loc_idx);
 
  581                if (loc_sp->IsEnabled()) {
 
  589              if (loc_sp->IsEnabled())
 
  607          result.
AppendError(
"at least one of the continue-to breakpoints must " 
  616        for (
break_id_t bp_id : bkpts_with_locs_seen) {
 
  617          if (bkpts_seen.count(bp_id)) {
 
  619                               "one of its locations: {0}", bp_id);
 
  630          if (!bkpts_with_locs_seen.count(bp_id)) {
 
  631            if (!bkpts_seen.count(bp_id) && bp_sp->IsEnabled()) {
 
  632              bkpts_disabled.push_back(bp_id);
 
  633              bp_sp->SetEnabled(
false);
 
  640          size_t num_locations = bp_sp->GetNumLocations();
 
  642          for (
size_t loc_idx = 0; loc_idx < num_locations; loc_idx++) {
 
  645            if (!with_locs.
Contains(tmp_id) && loc_sp->IsEnabled()) {
 
  646              if (llvm::Error 
error = loc_sp->SetEnabled(
false))
 
  648                    "failed to disable breakpoint location: {0}",
 
  649                    llvm::fmt_consume(std::move(
error)));
 
  651                locs_disabled.push_back(tmp_id);
 
  658        std::lock_guard<std::recursive_mutex> guard(
 
  663        for (uint32_t idx = 0; idx < num_threads; ++idx) {
 
  664          const bool override_suspend = 
false;
 
  670      if (
m_options.m_base_direction.has_value())
 
  680      if (run_to_bkpt_ids.
GetSize() != 0) {
 
  682        synchronous_execution = 
true;
 
  684      if (synchronous_execution)
 
  689      if (run_to_bkpt_ids.
GetSize() != 0) {
 
  698          bp_sp->SetEnabled(
true);
 
  705              = bp_sp->FindLocationByID(bkpt_id.GetLocationID());
 
  707            if (llvm::Error 
error = loc_sp->SetEnabled(
true))
 
  709                  "failed to enable breakpoint location: {0}",
 
  710                  llvm::fmt_consume(std::move(
error)));
 
  715      if (
error.Success()) {
 
  720        process->
SyncIOHandler(iohandler_id, std::chrono::seconds(2));
 
  724        if (synchronous_execution) {
 
  740          "Process cannot be continued from its current state (%s).\n",
 
 
 
  751#define LLDB_OPTIONS_process_detach 
  752#include "CommandOptions.inc" 
  754#pragma mark CommandObjectProcessDetach 
  769      switch (short_option) {
 
  776              "invalid boolean option: \"%s\"", option_arg.str().c_str());
 
  785        llvm_unreachable(
"Unimplemented option");
 
 
  795      return llvm::ArrayRef(g_process_detach_options);
 
 
 
  804                            "Detach from the current target process.",
 
  806                            eCommandRequiresProcess | eCommandTryTargetAPILock |
 
  807                                eCommandProcessMustBeLaunched) {}
 
 
  824      keep_stopped = 
false;
 
  827    if (
error.Success()) {
 
 
 
  838#define LLDB_OPTIONS_process_connect 
  839#include "CommandOptions.inc" 
  841#pragma mark CommandObjectProcessConnect 
  860      switch (short_option) {
 
  866        llvm_unreachable(
"Unimplemented option");
 
 
  876      return llvm::ArrayRef(g_process_connect_options);
 
 
 
  886                            "Connect to a remote debug service.",
 
  887                            "process connect <remote-url>", 0) {
 
 
  899          "'%s' takes exactly one argument:\nUsage: %s\n", 
m_cmd_name.c_str(),
 
  905    if (process && process->
IsAlive()) {
 
  908          " is currently being debugged, kill the process before connecting.\n",
 
  913    const char *plugin_name = 
nullptr;
 
  915      plugin_name = 
m_options.plugin_name.c_str();
 
  922            ? platform_sp->ConnectProcess(
 
  925            : platform_sp->ConnectProcessSynchronous(
 
  929    if (
error.Fail() || process_sp == 
nullptr) {
 
 
 
  938#pragma mark CommandObjectProcessPlugin 
  944            interpreter, 
"process plugin",
 
  945            "Send a custom command to the current target process plug-in.",
 
  946            "process plugin <args>", 0) {}
 
 
 
  959#define LLDB_OPTIONS_process_load 
  960#include "CommandOptions.inc" 
  962#pragma mark CommandObjectProcessLoad 
  982      switch (short_option) {
 
  985        if (!option_arg.empty())
 
  989        llvm_unreachable(
"Unimplemented option");
 
 
 1000      return llvm::ArrayRef(g_process_load_options);
 
 
 
 1010                            "Load a shared library into the current process.",
 
 1011                            "process load <filename> [<filename> ...]",
 
 1012                            eCommandRequiresProcess | eCommandTryTargetAPILock |
 
 1013                                eCommandProcessMustBeLaunched |
 
 1014                                eCommandProcessMustBePaused) {
 
 
 1034    for (
auto &entry : command.
entries()) {
 
 1037      llvm::StringRef image_path = entry.ref();
 
 1042        platform->ResolveRemotePath(image_spec, image_spec);
 
 1044            platform->LoadImage(process, 
FileSpec(), image_spec, 
error);
 
 1048        platform->ResolveRemotePath(
m_options.install_path,
 
 1050        image_token = platform->LoadImage(process, image_spec,
 
 1056            platform->LoadImage(process, image_spec, 
FileSpec(), 
error);
 
 1061            "Loading \"%s\"...ok\nImage %u loaded.\n", image_path.str().c_str(),
 
 1066                                     image_path.str().c_str(),
 
 
 
 1076#pragma mark CommandObjectProcessUnload 
 1082            interpreter, 
"process unload",
 
 1083            "Unload a shared library from the current process using the index " 
 1084            "returned by a previous call to \"process load\".",
 
 1085            "process unload <index>",
 
 1086            eCommandRequiresProcess | eCommandTryTargetAPILock |
 
 1087                eCommandProcessMustBeLaunched | eCommandProcessMustBePaused) {
 
 
 1102    const std::vector<lldb::addr_t> &tokens = process->
GetImageTokens();
 
 1103    const size_t token_num = tokens.size();
 
 1104    for (
size_t i = 0; i < token_num; ++i) {
 
 
 1115    for (
auto &entry : command.
entries()) {
 
 1116      uint32_t image_token;
 
 1117      if (entry.ref().getAsInteger(0, image_token)) {
 
 1119                                     entry.ref().str().c_str());
 
 1123            process, image_token));
 
 1124        if (
error.Success()) {
 
 1126              "Unloading shared library with index %u...ok\n", image_token);
 
 
 
 1139#pragma mark CommandObjectProcessSignal 
 1145            interpreter, 
"process signal",
 
 1146            "Send a UNIX signal to the current target process.", nullptr,
 
 1147            eCommandRequiresProcess | eCommandTryTargetAPILock) {
 
 
 1160    int signo = signals->GetFirstSignalNumber();
 
 1163      signo = signals->GetNextSignalNumber(signo);
 
 
 1175      if (::isxdigit(signal_name[0])) {
 
 1176        if (!llvm::to_integer(signal_name, signo))
 
 1179        signo = process->
GetUnixSignals()->GetSignalNumberFromName(signal_name);
 
 1186        if (
error.Success()) {
 
 1195          "'%s' takes exactly one signal number argument:\nUsage: %s\n",
 
 
 
 1202#pragma mark CommandObjectProcessInterrupt 
 1208                            "Interrupt the current target process.",
 
 1209                            "process interrupt",
 
 1210                            eCommandRequiresProcess | eCommandTryTargetAPILock |
 
 1211                                eCommandProcessMustBeLaunched) {}
 
 
 1218    if (process == 
nullptr) {
 
 1223    bool clear_thread_plans = 
true;
 
 1225    if (
error.Success()) {
 
 
 
 1235#pragma mark CommandObjectProcessKill 
 1241                            "Terminate the current target process.",
 
 1243                            eCommandRequiresProcess | eCommandTryTargetAPILock |
 
 1244                                eCommandProcessMustBeLaunched) {}
 
 
 1251    if (process == 
nullptr) {
 
 1257    if (
error.Success()) {
 
 
 
 1266#define LLDB_OPTIONS_process_save_core 
 1267#include "CommandOptions.inc" 
 1273            interpreter, 
"process save-core",
 
 1274            "Save the current process as a core file using an " 
 1275            "appropriate file type.",
 
 1276            "process save-core [-s corefile-style -p plugin-name] FILE",
 
 1277            eCommandRequiresProcess | eCommandTryTargetAPILock |
 
 1278                eCommandProcessMustBeLaunched) {
 
 
 1296      auto orig = llvm::ArrayRef(g_process_save_core_options);
 
 1298      llvm::copy(g_process_save_core_options, 
m_opt_def.data());
 
 1300        llvm::StringRef opt_name = value.long_option;
 
 1301        if (opt_name != 
"plugin-name")
 
 1304        std::vector<llvm::StringRef> plugin_names =
 
 1307        for (
auto [num, val] : llvm::zip(plugin_names, 
m_plugin_enums)) {
 
 1308          val.string_value = num.data();
 
 
 1321      switch (short_option) {
 
 1332        llvm_unreachable(
"Unimplemented option");
 
 
 
 1355        auto &core_dump_options = 
m_options.m_core_dump_options;
 
 1356        core_dump_options.SetOutputFile(output_file);
 
 1357        core_dump_options.SetProcess(process_sp);
 
 1359        if (
error.Success()) {
 
 1360          if (core_dump_options.GetStyle() ==
 
 1362              core_dump_options.GetStyle() ==
 
 1365                "\nModified-memory or stack-memory only corefile " 
 1366                "created.  This corefile may \n" 
 1367                "not show library/framework/app binaries " 
 1368                "on a different system, or when \n" 
 1369                "those binaries have " 
 1370                "been updated/modified. Copies are not included\n" 
 1371                "in this corefile.  Use --style full to include all " 
 1372                "process memory.\n");
 
 1377              "Failed to save core file for process: %s\n", 
error.AsCString());
 
 
 
 1392#pragma mark CommandObjectProcessStatus 
 1393#define LLDB_OPTIONS_process_status 
 1394#include "CommandOptions.inc" 
 1400            interpreter, 
"process status",
 
 1401            "Show status and stop location for the current target process.",
 
 1403            eCommandRequiresProcess | eCommandTryTargetAPILock) {}
 
 
 1419      switch (short_option) {
 
 1427        llvm_unreachable(
"Unimplemented option");
 
 
 1439      return llvm::ArrayRef(g_process_status_options);
 
 
 
 1455    const bool only_threads_with_stop_reason = 
true;
 
 1456    const uint32_t start_frame = 0;
 
 1457    const uint32_t num_frames = 1;
 
 1458    const uint32_t num_frames_with_source = 1;
 
 1459    const bool stop_format = 
true;
 
 1461    process->
GetThreadStatus(strm, only_threads_with_stop_reason, start_frame,
 
 1462                             num_frames, num_frames_with_source, stop_format);
 
 1468        int bits = std::bitset<64>(~code_mask).count();
 
 1470            "Addressable code address mask: 0x%" PRIx64 
"\n", code_mask);
 
 1472            "Addressable data address mask: 0x%" PRIx64 
"\n", data_mask);
 
 1474            "Number of bits used in addressing (code): %d\n", 
bits);
 
 1479        result.
AppendError(
"Couldn't retrieve the target's platform");
 
 1483      auto expected_crash_info =
 
 1484          platform_sp->FetchExtendedCrashInformation(*process);
 
 1486      if (!expected_crash_info) {
 
 1487        result.
AppendError(llvm::toString(expected_crash_info.takeError()));
 
 1493      if (crash_info_sp) {
 
 1495        strm.
PutCString(
"Extended Crash Information:\n");
 
 1496        crash_info_sp->GetDescription(strm);
 
 
 
 1514#define LLDB_OPTIONS_process_handle 
 1515#include "CommandOptions.inc" 
 1517#pragma mark CommandObjectProcessHandle 
 1532      switch (short_option) {
 
 1540        stop = std::string(option_arg);
 
 1543        notify = std::string(option_arg);
 
 1546        pass = std::string(option_arg);
 
 1552        llvm_unreachable(
"Unimplemented option");
 
 
 1567      return llvm::ArrayRef(g_process_handle_options);
 
 
 
 1582                            "Manage LLDB handling of OS signals for the " 
 1583                            "current target process.  Defaults to showing " 
 1586    SetHelpLong(
"\nIf no signals are specified but one or more actions are, " 
 1587                "and there is a live process, update them all.  If no action " 
 1588                "is specified, list the current values.\n" 
 1589                "If you specify actions with no target (e.g. in an init file) " 
 1590                "or in a target with no process " 
 1591                "the values will get copied into subsequent targets, but " 
 1592                "lldb won't be able to spell-check the options since it can't " 
 1593                "know which signal set will later be in force." 
 1594                "\nYou can see the signal modifications held by the target" 
 1595                "by passing the -t option." 
 1596                "\nYou can also clear the target modification for a signal" 
 1597                "by passing the -c option");
 
 
 1606    str.
Printf(
"NAME         PASS   STOP   NOTIFY\n");
 
 1607    str.
Printf(
"===========  =====  =====  ======\n");
 
 
 1616    str.
Format(
"{0, -11}  ", sig_name);
 
 1617    if (signals_sp->GetSignalInfo(signo, suppress, stop, notify)) {
 
 1618      bool pass = !suppress;
 
 1619      str.
Printf(
"%s  %s  %s", (pass ? 
"true " : 
"false"),
 
 1620                 (stop ? 
"true " : 
"false"), (notify ? 
"true " : 
"false"));
 
 
 1626                              int num_valid_signals,
 
 1630    if (num_valid_signals > 0) {
 
 1632      for (
size_t i = 0; i < num_args; ++i) {
 
 1633        int32_t signo = signals_sp->GetSignalNumberFromName(
 
 1641      int32_t signo = signals_sp->GetFirstSignalNumber();
 
 1643        PrintSignal(str, signo, signals_sp->GetSignalAsStringRef(signo),
 
 1645        signo = signals_sp->GetNextSignalNumber(signo);
 
 
 1660    std::optional<bool> stop_action = {};
 
 1661    std::optional<bool> pass_action = {};
 
 1662    std::optional<bool> notify_action = {};
 
 1665      bool success = 
false;
 
 1669            "Invalid argument for command option --stop; must be " 
 1670            "true or false.\n");
 
 1674      stop_action = value;
 
 1678      bool success = 
false;
 
 1682            "Invalid argument for command option --pass; must be " 
 1683            "true or false.\n");
 
 1686      pass_action = value;
 
 1690      bool success = 
false;
 
 1694        result.
AppendError(
"Invalid argument for command option --notify; must " 
 1695                           "be true or false.\n");
 
 1698      notify_action = value;
 
 1701    if (!
m_options.notify.empty() && !notify_action.has_value()) {
 
 1704    bool no_actions = (!stop_action.has_value() && !pass_action.has_value() &&
 
 1705                       !notify_action.has_value());
 
 1706    if (
m_options.only_target_values && !no_actions) {
 
 1707      result.
AppendError(
"-t is for reporting, not setting, target values.");
 
 1714      signals_sp = process_sp->GetUnixSignals();
 
 1716    int num_signals_set = 0;
 
 1737      for (
const auto &arg : signal_args) {
 
 1741          int32_t signo = signals_sp->GetSignalNumberFromName(arg.c_str());
 
 1743            if (stop_action.has_value())
 
 1744              signals_sp->SetShouldStop(signo, *stop_action);
 
 1745            if (pass_action.has_value()) {
 
 1746              bool suppress = !*pass_action;
 
 1747              signals_sp->SetShouldSuppress(signo, suppress);
 
 1749            if (notify_action.has_value())
 
 1750              signals_sp->SetShouldNotify(signo, *notify_action);
 
 1763          if (llvm::to_integer(arg.c_str(), signo)) {
 
 1765                                         "number with no process");
 
 1768         num_signals_set = num_args;
 
 1770        auto set_lazy_bool = [](std::optional<bool> action) -> 
LazyBool {
 
 1771          if (!action.has_value())
 
 1779                                set_lazy_bool(notify_action),
 
 1780                                set_lazy_bool(stop_action));
 
 1786      if ((notify_action.has_value() || stop_action.has_value() ||
 
 1787           pass_action.has_value()) &&
 
 1790                "Do you really want to update all the signals?", 
false)) {
 
 1791          int32_t signo = signals_sp->GetFirstSignalNumber();
 
 1793            if (notify_action.has_value())
 
 1794              signals_sp->SetShouldNotify(signo, *notify_action);
 
 1795            if (stop_action.has_value())
 
 1796              signals_sp->SetShouldStop(signo, *stop_action);
 
 1797            if (pass_action.has_value()) {
 
 1798              bool suppress = !*pass_action;
 
 1799              signals_sp->SetShouldSuppress(signo, suppress);
 
 1801            signo = signals_sp->GetNextSignalNumber(signo);
 
 1809                             num_signals_set, signals_sp);
 
 1814    if (num_signals_set > 0)
 
 
 
 1831            "process trace start",
 
 1832            "Start tracing this process with the corresponding trace " 
 1834            "process trace start [<trace-options>]") {}
 
 
 
 1847                            "Stop tracing this process. This does not affect " 
 1848                            "traces started with the " 
 1849                            "\"thread trace start\" command.",
 
 1850                            "process trace stop",
 
 1851                            eCommandRequiresProcess | eCommandTryTargetAPILock |
 
 1852                                eCommandProcessMustBeLaunched |
 
 1853                                eCommandProcessMustBePaused |
 
 1854                                eCommandProcessMustBeTraced) {}
 
 
 1861    TraceSP trace_sp = process_sp->GetTarget().GetTrace();
 
 1863    if (llvm::Error err = trace_sp->Stop())
 
 
 
 1875            interpreter, 
"trace", 
"Commands for tracing the current process.",
 
 1876            "process trace <subcommand> [<subcommand objects>]") {
 
 
 
 1891          interpreter, 
"process",
 
 1892          "Commands for interacting with processes on the current platform.",
 
 1893          "process <subcommand> [<subcommand-options>]") {
 
 
static llvm::raw_ostream & error(Stream &strm)
~CommandObjectMultiwordProcessTrace() override=default
CommandObjectMultiwordProcessTrace(CommandInterpreter &interpreter)
CommandOptionsProcessAttach m_options
~CommandObjectProcessAttach() override=default
OptionGroupOptions m_all_options
OptionGroupPythonClassWithDict m_class_options
CommandObjectProcessAttach(CommandInterpreter &interpreter)
Options * GetOptions() override
void DoExecute(Args &command, CommandReturnObject &result) 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
~CommandOptions() override=default
llvm::ArrayRef< OptionDefinition > GetDefinitions() override
~CommandObjectProcessConnect() override=default
void DoExecute(Args &command, CommandReturnObject &result) override
CommandObjectProcessConnect(CommandInterpreter &interpreter)
Options * GetOptions() override
~CommandOptions() override=default
Status SetOptionValue(uint32_t option_idx, llvm::StringRef option_arg, ExecutionContext *exe_ctx) override
Set the value of an option.
llvm::ArrayRef< OptionDefinition > GetDefinitions() override
void OptionParsingStarting(ExecutionContext *execution_context) override
bool m_any_bkpts_specified
std::optional< lldb::RunDirection > m_base_direction
void DoExecute(Args &command, CommandReturnObject &result) override
CommandObjectProcessContinue(CommandInterpreter &interpreter)
~CommandObjectProcessContinue() override=default
Options * GetOptions() override
void OptionParsingStarting(ExecutionContext *execution_context) 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.
~CommandOptions() override=default
Options * GetOptions() override
void DoExecute(Args &command, CommandReturnObject &result) override
CommandObjectProcessDetach(CommandInterpreter &interpreter)
~CommandObjectProcessDetach() override=default
~CommandOptions() override=default
void OptionParsingStarting(ExecutionContext *execution_context) 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.
CommandObjectProcessHandle(CommandInterpreter &interpreter)
~CommandObjectProcessHandle() override=default
void PrintSignalHeader(Stream &str)
Options * GetOptions() override
void DoExecute(Args &signal_args, CommandReturnObject &result) override
void PrintSignalInformation(Stream &str, Args &signal_args, int num_valid_signals, const UnixSignalsSP &signals_sp)
void PrintSignal(Stream &str, int32_t signo, llvm::StringRef sig_name, const UnixSignalsSP &signals_sp)
void DoExecute(Args &command, CommandReturnObject &result) override
CommandObjectProcessInterrupt(CommandInterpreter &interpreter)
~CommandObjectProcessInterrupt() override=default
void DoExecute(Args &command, CommandReturnObject &result) override
~CommandObjectProcessKill() override=default
CommandObjectProcessKill(CommandInterpreter &interpreter)
std::string m_new_process_action
bool StopProcessIfNecessary(Process *process, StateType &state, CommandReturnObject &result)
CommandObjectProcessLaunchOrAttach(CommandInterpreter &interpreter, const char *name, const char *help, const char *syntax, uint32_t flags, const char *new_process_action)
~CommandObjectProcessLaunchOrAttach() override=default
void DoExecute(Args &launch_args, CommandReturnObject &result) override
OptionGroupPythonClassWithDict m_class_options
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.
OptionGroupOptions m_all_options
~CommandObjectProcessLaunch() override=default
Options * GetOptions() override
CommandOptionsProcessLaunch m_options
CommandObjectProcessLaunch(CommandInterpreter &interpreter)
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.
~CommandOptions() override=default
void OptionParsingStarting(ExecutionContext *execution_context) override
~CommandObjectProcessLoad() 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
Options * GetOptions() override
CommandObjectProcessLoad(CommandInterpreter &interpreter)
~CommandObjectProcessPlugin() override=default
CommandObjectProcessPlugin(CommandInterpreter &interpreter)
CommandObject * GetProxyCommandObject() override
void OptionParsingStarting(ExecutionContext *execution_context) override
llvm::SmallVector< OptionEnumValueElement > m_plugin_enums
~CommandOptions() override=default
SaveCoreOptions m_core_dump_options
std::vector< OptionDefinition > m_opt_def
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
Options * GetOptions() override
~CommandObjectProcessSaveCore() override=default
void DoExecute(Args &command, CommandReturnObject &result) override
CommandObjectProcessSaveCore(CommandInterpreter &interpreter)
CommandObjectProcessSignal(CommandInterpreter &interpreter)
void HandleArgumentCompletion(CompletionRequest &request, OptionElementVector &opt_element_vector) override
The default version handles argument definitions that have only one argument type,...
~CommandObjectProcessSignal() override=default
void DoExecute(Args &command, CommandReturnObject &result) override
~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
Options * GetOptions() override
CommandObjectProcessStatus(CommandInterpreter &interpreter)
~CommandObjectProcessStatus() override=default
void DoExecute(Args &command, CommandReturnObject &result) override
CommandObjectProcessTraceStart(CommandInterpreter &interpreter)
lldb::CommandObjectSP GetDelegateCommand(Trace &trace) override
void DoExecute(Args &command, CommandReturnObject &result) override
CommandObjectProcessTraceStop(CommandInterpreter &interpreter)
~CommandObjectProcessTraceStop() override=default
void DoExecute(Args &command, CommandReturnObject &result) override
CommandObjectProcessUnload(CommandInterpreter &interpreter)
~CommandObjectProcessUnload() override=default
void HandleArgumentCompletion(CompletionRequest &request, OptionElementVector &opt_element_vector) override
The default version handles argument definitions that have only one argument type,...
An architecture specification class.
bool IsValid() const
Tests if this ArchSpec is valid.
llvm::Triple & GetTriple()
Architecture triple accessor.
bool IsExactMatch(const ArchSpec &rhs) const
Shorthand for IsMatch(rhs, ExactMatch).
A command line argument class.
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.
bool Contains(BreakpointID bp_id) const
bool AddBreakpointID(BreakpointID bp_id)
BreakpointID GetBreakpointIDAtIndex(size_t index) const
void SetBreakpointLocationID(lldb::break_id_t loc_id)
lldb::break_id_t GetBreakpointID() const
lldb::break_id_t GetLocationID() const
General Outline: Allows adding and removing breakpoints and find by ID and index.
BreakpointIterable Breakpoints()
lldb::BreakpointSP FindBreakpointByID(lldb::break_id_t breakID) const
Returns a shared pointer to the breakpoint with id breakID.
General Outline: A breakpoint has four main parts, a filter, a resolver, the list of breakpoint locat...
void SetIgnoreCount(uint32_t count)
Set the breakpoint to ignore the next count breakpoint hits.
bool IsInternal() const
Tell whether this breakpoint is an "internal" breakpoint.
static void VerifyBreakpointOrLocationIDs(Args &args, Target &target, CommandReturnObject &result, BreakpointIDList *valid_ids, BreakpointName::Permissions ::PermissionKinds purpose)
CommandObjectMultiwordProcess(CommandInterpreter &interpreter)
~CommandObjectMultiwordProcess() 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)
CommandObjectProxy(CommandInterpreter &interpreter, const char *name, const char *help=nullptr, const char *syntax=nullptr, uint32_t flags=0)
friend class CommandInterpreter
CommandObjectTraceProxy(bool live_debug_session_only, CommandInterpreter &interpreter, const char *name, const char *help=nullptr, const char *syntax=nullptr, uint32_t flags=0)
virtual void SetHelpLong(llvm::StringRef str)
void AddSimpleArgumentList(lldb::CommandArgumentType arg_type, ArgumentRepetitionType repetition_type=eArgRepeatPlain)
Target & GetDummyTarget()
ExecutionContext m_exe_ctx
CommandInterpreter & m_interpreter
Thread * GetDefaultThread()
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 void AppendError(llvm::StringRef in_string)
void AppendWarningWithFormat(const char *format,...) __attribute__((format(printf
void SetStatus(lldb::ReturnStatus status)
void AppendErrorWithFormat(const char *format,...) __attribute__((format(printf
void AppendMessageWithFormat(const char *format,...) __attribute__((format(printf
void SetDidChangeProcessState(bool b)
void void AppendWarning(llvm::StringRef in_string)
void AppendErrorWithFormatv(const char *format, Args &&...args)
Stream & GetOutputStream()
"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 class to manage flag bits.
lldb::TargetSP GetSelectedTarget()
void SetAsyncExecution(bool async)
TargetList & GetTargetList()
Get accessor for the target list.
"lldb/Target/ExecutionContext.h" A class that contains an execution context.
Process * GetProcessPtr() const
Returns a pointer to the process object.
void Resolve(llvm::SmallVectorImpl< char > &path)
Resolve path to make it canonical.
static FileSystem & Instance()
A command line option parsing protocol class.
std::vector< Option > m_getopt_table
static Status SaveCore(lldb_private::SaveCoreOptions &core_options)
static std::vector< llvm::StringRef > GetSaveCorePluginNames()
FileSpec & GetExecutableFile()
void Dump(Stream &stream) const
bool GetDetachKeepsStopped() const
A plug-in interface definition class for debugging a process.
StopPointSiteList< lldb_private::BreakpointSite > & GetBreakpointSiteList()
lldb::pid_t GetID() const
Returns the pid of the process or LLDB_INVALID_PROCESS_ID if there is no known pid.
Status Destroy(bool force_kill)
Kills the process and shuts down all threads that were spawned to track and monitor the process.
ThreadList & GetThreadList()
Status Resume()
Resumes all of a process's threads as configured using the Thread run control functions.
ProcessModID GetModID() const
Get the Modification ID of the process.
Status ResumeSynchronous(Stream *stream)
Resume a process, and wait for it to stop.
size_t GetThreadStatus(Stream &ostrm, bool only_threads_with_stop_reason, uint32_t start_frame, uint32_t num_frames, uint32_t num_frames_with_source, bool stop_format)
Status Detach(bool keep_stopped)
Detaches from a running or stopped process.
Status Signal(int signal)
Sends a process a UNIX signal signal.
lldb::StateType GetState()
Get accessor for the current process state.
void GetStatus(Stream &ostrm)
uint32_t GetIOHandlerID() const
bool GetShouldDetach() const
const std::vector< lldb::addr_t > & GetImageTokens()
Get the image vector for the current process.
virtual bool IsAlive()
Check if a process is still alive.
virtual ArchSpec GetSystemArchitecture()
Get the system architecture for this process.
virtual CommandObject * GetPluginCommandObject()
Return a multi-word command object that can be used to expose plug-in specific commands.
void SyncIOHandler(uint32_t iohandler_id, const Timeout< std::micro > &timeout)
Waits for the process state to be running within a given msec timeout.
lldb::addr_t GetDataAddressMask()
const lldb::UnixSignalsSP & GetUnixSignals()
void SetBaseDirection(lldb::RunDirection direction)
Set the base run direction for the process.
lldb::addr_t GetCodeAddressMask()
Get the current address mask in the Process.
Status Halt(bool clear_thread_plans=false, bool use_run_lock=true)
Halts a running process.
Target & GetTarget()
Get the target object pointer for this module.
static Status FromErrorStringWithFormat(const char *format,...) __attribute__((format(printf
const char * AsCString(const char *default_error_str="unknown error") const
Get the error string associated with the current error.
bool Success() const
Test for success condition.
StopPointSiteSP FindByID(typename StopPointSite::SiteID site_id)
Returns a shared pointer to the site with id site_id.
llvm::StringRef GetString() const
A stream class that can stream formatted output to a file.
void Format(const char *format, Args &&... args)
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.
size_t EOL()
Output and End of Line character to the stream.
std::shared_ptr< Dictionary > DictionarySP
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.
llvm::StringRef GetLaunchWorkingDirectory() const
bool GetDisableSTDIO() const
llvm::StringRef GetArg0() const
void SetRunArguments(const Args &args)
bool GetDisableASLR() const
const ProcessLaunchInfo & GetProcessLaunchInfo() const
bool GetInheritTCC() const
Environment GetEnvironment() const
void SetProcessLaunchInfo(const ProcessLaunchInfo &launch_info)
bool GetDetachOnError() const
void ClearDummySignals(Args &signal_names)
Clear the dummy signals in signal_names from the target, or all signals if signal_names is empty.
BreakpointList & GetBreakpointList(bool internal=false)
const lldb::ProcessSP & GetProcessSP() const
Status Launch(ProcessLaunchInfo &launch_info, Stream *stream)
lldb::ModuleSP GetExecutableModule()
Gets the module for the main executable.
lldb::PlatformSP GetPlatform()
const ArchSpec & GetArchitecture() const
void AddDummySignal(llvm::StringRef name, LazyBool pass, LazyBool print, LazyBool stop)
Add a signal to the Target's list of stored signals/actions.
void PrintDummySignals(Stream &strm, Args &signals)
Print all the signals set in this target.
Status Attach(ProcessAttachInfo &attach_info, Stream *stream)
uint32_t GetSize(bool can_update=true)
lldb::ThreadSP GetThreadAtIndex(uint32_t idx, bool can_update=true)
std::recursive_mutex & GetMutex() const override
A plug-in interface definition class for trace information.
virtual lldb::CommandObjectSP GetProcessTraceStartCommand(CommandInterpreter &interpreter)=0
Get the command handle for the "process trace start" command.
#define LLDB_INVALID_BREAK_ID
#define LLDB_INVALID_ADDRESS_MASK
Address Mask Bits not used for addressing are set to 1 in the mask; all mask bits set is an invalid v...
#define LLDB_INVALID_SIGNAL_NUMBER
#define LLDB_INVALID_IMAGE_TOKEN
A class that represents a running process on the host machine.
std::vector< OptionArgElement > OptionElementVector
const char * StateAsCString(lldb::StateType state)
Converts a StateType to a C string.
const char * toString(AppleArm64ExceptionClass EC)
static uint32_t bits(const uint32_t val, const uint32_t msbit, const uint32_t lsbit)
std::shared_ptr< lldb_private::Trace > TraceSP
std::shared_ptr< lldb_private::BreakpointSite > BreakpointSiteSP
std::shared_ptr< lldb_private::BreakpointLocation > BreakpointLocationSP
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::UnixSignals > UnixSignalsSP
std::shared_ptr< lldb_private::Platform > PlatformSP
StateType
Process and Thread States.
@ eStateConnected
Process is connected to remote debug services, but not launched or attached to anything yet.
@ eStateStopped
Process or thread is stopped and can be examined.
@ eStateRunning
Process or thread is running and can't be examined.
@ eStateAttaching
Process is currently trying to attach.
std::shared_ptr< lldb_private::Breakpoint > BreakpointSP
std::shared_ptr< lldb_private::Process > ProcessSP
@ eReturnStatusSuccessContinuingNoResult
@ eReturnStatusSuccessFinishResult
@ eReturnStatusSuccessFinishNoResult
@ eArgTypeUnsignedInteger
std::shared_ptr< lldb_private::StopInfo > StopInfoSP
std::shared_ptr< lldb_private::Target > TargetSP
std::shared_ptr< lldb_private::Module > ModuleSP
static int64_t ToOptionEnum(llvm::StringRef s, const OptionEnumValues &enum_values, int32_t fail_value, Status &error)
static bool ToBoolean(llvm::StringRef s, bool fail_value, bool *success_ptr)