@@ -2260,21 +2260,41 @@ class CommandObjectLanguageSwiftTaskInfo final : public CommandObjectParsed {
2260
2260
public:
2261
2261
CommandObjectLanguageSwiftTaskInfo (CommandInterpreter &interpreter)
2262
2262
: 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);
2264
2267
}
2265
2268
2266
2269
private:
2267
2270
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" ;
2271
2281
}
2272
2282
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 ();
2278
2298
}
2279
2299
2280
2300
auto ts_or_err = m_exe_ctx.GetTargetRef ().GetScratchTypeSystemForLanguage (
@@ -2291,12 +2311,11 @@ class CommandObjectLanguageSwiftTaskInfo final : public CommandObjectParsed {
2291
2311
return ;
2292
2312
}
2293
2313
2294
- addr_t task_addr = task_addr_or_err.get ();
2295
2314
// TypeMangling for "Swift.UnsafeCurrentTask"
2296
2315
CompilerType task_type =
2297
2316
ts->GetTypeFromMangledTypename (ConstString (" $sSctD" ));
2298
2317
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 );
2300
2319
if (auto synthetic_sp = task_sp->GetSyntheticValue ())
2301
2320
task_sp = synthetic_sp;
2302
2321
0 commit comments