@@ -2260,21 +2260,41 @@ class CommandObjectLanguageSwiftTaskInfo final : public CommandObjectParsed {
22602260public:
22612261 CommandObjectLanguageSwiftTaskInfo (CommandInterpreter &interpreter)
22622262 : CommandObjectParsed(interpreter, " info" ,
2263- " Print the Task being run on the current thread." ) {
2263+ " Print info about the Task being run on the "
2264+ " current thread or the Task at the given address."
2265+ " language swift task info [<address>]" ) {
2266+ AddSimpleArgumentList (eArgTypeAddress, eArgRepeatOptional);
22642267 }
22652268
22662269private:
22672270 void DoExecute (Args &command, CommandReturnObject &result) override {
2268- if (!m_exe_ctx.GetThreadPtr ()) {
2269- result.AppendError (" must be run from a running process and valid thread" );
2270- return ;
2271+ addr_t task_addr = LLDB_INVALID_ADDRESS;
2272+ StringRef task_name = " current_task" ;
2273+
2274+ if (command.GetArgumentCount () == 1 ) {
2275+ StringRef addr_arg = command.GetArgumentAtIndex (0 );
2276+ if (addr_arg.getAsInteger (0 , task_addr)) {
2277+ result.AppendErrorWithFormatv (" invalid address format: {0}" , addr_arg);
2278+ return ;
2279+ }
2280+ task_name = " task" ;
22712281 }
22722282
2273- auto task_addr_or_err =
2274- GetTaskAddrFromThreadLocalStorage (m_exe_ctx.GetThreadRef ());
2275- if (auto error = task_addr_or_err.takeError ()) {
2276- result.AppendError (toString (std::move (error)));
2277- return ;
2283+ if (task_addr == LLDB_INVALID_ADDRESS) {
2284+ if (!m_exe_ctx.GetThreadPtr ()) {
2285+ result.AppendError (
2286+ " must be run from a running process and valid thread" );
2287+ return ;
2288+ }
2289+
2290+ auto task_addr_or_err =
2291+ GetTaskAddrFromThreadLocalStorage (m_exe_ctx.GetThreadRef ());
2292+ if (auto error = task_addr_or_err.takeError ()) {
2293+ result.AppendError (toString (std::move (error)));
2294+ return ;
2295+ }
2296+
2297+ task_addr = task_addr_or_err.get ();
22782298 }
22792299
22802300 auto ts_or_err = m_exe_ctx.GetTargetRef ().GetScratchTypeSystemForLanguage (
@@ -2291,12 +2311,11 @@ class CommandObjectLanguageSwiftTaskInfo final : public CommandObjectParsed {
22912311 return ;
22922312 }
22932313
2294- addr_t task_addr = task_addr_or_err.get ();
22952314 // TypeMangling for "Swift.UnsafeCurrentTask"
22962315 CompilerType task_type =
22972316 ts->GetTypeFromMangledTypename (ConstString (" $sSctD" ));
22982317 auto task_sp = ValueObject::CreateValueObjectFromAddress (
2299- " current_task " , task_addr, m_exe_ctx, task_type, false );
2318+ task_name , task_addr, m_exe_ctx, task_type, false );
23002319 if (auto synthetic_sp = task_sp->GetSyntheticValue ())
23012320 task_sp = synthetic_sp;
23022321
0 commit comments