=?utf-8?q?José?= L. Junior <jljunio...@gmail.com> Message-ID: In-Reply-To: <llvm/llvm-project/pull/67019/l...@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, ---------------- clayborg wrote: eFunctionNameTypeAuto is too broad and might not work for all languages. Most executable object files have an accessor to fetch the entry point address, which is the address of the main function. The "--stop-at-entry" is for stopping right away at the first instruction of the program, not the main function, so even though the API used below mentions the entry point, it is actually the main function. ``` ModuleSP exe_module_sp = target_sp->GetExecutableModule(); lldb_private::Address entry_addr; if (exe_module_sp ) { ObjectFile *objfile = exe_module_sp ->GetObjectFile(); if (objfile) entry_addr = objfile->GetEntryPointAddress(); } if (entry_addr.IsValid()) { BreakpointSP bp_sp = target_sp->CreateBreakpoint(entry_addr, /*internal=*/false, /*hardware=*/false); if (!bp_sp) error.SetErrorString("entry breakpoint creation failed."); } else { error.SetErrorString("executable doesn't have an entrypoint address."); } ``` https://github.com/llvm/llvm-project/pull/67019 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits