summaryrefslogtreecommitdiff
path: root/lldb/source/Commands/CommandOptionsProcessLaunch.cpp
diff options
context:
space:
mode:
authorJosé Lira Junior <jljuniorpb@gmail.com>2023-10-09 20:43:59 -0300
committerGitHub <noreply@github.com>2023-10-09 16:43:59 -0700
commitac0dda894231e6281e7739aa0ea01a4e9697c747 (patch)
tree03ad634664b14049716db3f8af4b1b5065e0cb05 /lldb/source/Commands/CommandOptionsProcessLaunch.cpp
parentf92309a3a5c57403deec32e6bbb88c3f5beb65d5 (diff)
[lldb] add stop-at-user-entry option to process launch (#67019)
## Description This pull request adds a new `stop-at-user-entry` option to LLDB `process launch` command, allowing users to launch a process and pause execution at the entry point of the program (for C-based languages, `main` function). ## Motivation This option provides a convenient way to begin debugging a program by launching it and breaking at the desired entry point. ## Changes Made - Added `stop-at-user-entry` option to `Options.td` and the corresponding case in `CommandOptionsProcessLaunch.cpp` (short option is 'm') - Implemented `GetUserEntryPointName` method in the Language plugins available at the moment. - Declared the `CreateBreakpointAtUserEntry` method in the Target API. - Create Shell test for the command `command-process-launch-user-entry.test`. ## Usage `process launch --stop-at-user-entry` or `process launch -m` launches the process and pauses execution at the entry point of the program.
Diffstat (limited to 'lldb/source/Commands/CommandOptionsProcessLaunch.cpp')
-rw-r--r--lldb/source/Commands/CommandOptionsProcessLaunch.cpp8
1 files changed, 5 insertions, 3 deletions
diff --git a/lldb/source/Commands/CommandOptionsProcessLaunch.cpp b/lldb/source/Commands/CommandOptionsProcessLaunch.cpp
index 85ad8ff5e071..b1c13d4df79e 100644
--- a/lldb/source/Commands/CommandOptionsProcessLaunch.cpp
+++ b/lldb/source/Commands/CommandOptionsProcessLaunch.cpp
@@ -34,11 +34,15 @@ Status CommandOptionsProcessLaunch::SetOptionValue(
Status error;
const int short_option = g_process_launch_options[option_idx].short_option;
+ TargetSP target_sp =
+ execution_context ? execution_context->GetTargetSP() : TargetSP();
switch (short_option) {
case 's': // Stop at program entry point
launch_info.GetFlags().Set(eLaunchFlagStopAtEntry);
break;
-
+ case 'm': // Stop at user entry point
+ target_sp->CreateBreakpointAtUserEntry(error);
+ break;
case 'i': // STDIN for read only
{
FileAction action;
@@ -89,8 +93,6 @@ Status CommandOptionsProcessLaunch::SetOptionValue(
break;
case 'a': {
- TargetSP target_sp =
- execution_context ? execution_context->GetTargetSP() : TargetSP();
PlatformSP platform_sp =
target_sp ? target_sp->GetPlatform() : PlatformSP();
launch_info.GetArchitecture() =