[Lldb-commits] [lldb] [lldb] add stop-at-main option to process launch (PR #67019)

via lldb-commits lldb-commits at lists.llvm.org
Mon Sep 25 17:38:31 PDT 2023


=?utf-8?q?José?= L. Junior <jljuniorpb at gmail.com>,
=?utf-8?q?José?= L. Junior <jljuniorpb at gmail.com>,
=?utf-8?q?José?= L. Junior <jljuniorpb at gmail.com>
Message-ID:
In-Reply-To: <llvm/llvm-project/pull/67019/lldb at github.com>


================
@@ -38,7 +38,18 @@ Status CommandOptionsProcessLaunch::SetOptionValue(
   case 's': // Stop at program entry point
     launch_info.GetFlags().Set(eLaunchFlagStopAtEntry);
     break;
-
+  case 'm': // Stop at main function
+  {
+    TargetSP target_sp =
+        execution_context ? execution_context->GetTargetSP() : TargetSP();
+    BreakpointSP bp_sp = target_sp->CreateBreakpoint(
+        nullptr, nullptr, "main", eFunctionNameTypeAuto, eLanguageTypeUnknown,
----------------
jimingham wrote:

We have a list of "Supported Languages" (Language::GetSupportedLangauges) which are the ones we actually have plugins for as opposed to the ones whose names we know.  That's the list you should be querying. 

We should add a new API to the Language plugin: Language::GetUserEntrypointName() and then this code should iterate over all the supported languages building up a unique list of entry point names using this API.  At present there's going to be one: "main" repeated many times but I think Walter promised us another one soon...  

If you find more than one name, there's a Target::CreateBreakpoint overload that takes a `const char *func_names[]` - that you can use to make one portmanteau breakpoint for all the entry point names.  

It's also a good idea to add a shared library filter instead of the first `nullptr` in the code above, and specify the main executable.  You know the entry point has to be in the main executable, and so it would be inefficient to search the whole world for this breakpoint.  It could also end up not being what you want, because some other shared library might call a function named "main" as part of it's shared library loading code (which happens before the language's entry point) so you would in fact stop too early.

You'll need to pass eLanguageTypeUnknown for the language.

https://github.com/llvm/llvm-project/pull/67019


More information about the lldb-commits mailing list