1 /* 2 * Copyright 2012, Ingo Weinhold, ingo_weinhold@gmx.de. 3 * Distributed under the terms of the MIT License. 4 */ 5 6 7 #include "CliThreadsCommand.h" 8 9 #include <stdio.h> 10 11 #include <AutoLocker.h> 12 13 #include "CliContext.h" 14 #include "Team.h" 15 #include "UiUtils.h" 16 17 18 CliThreadsCommand::CliThreadsCommand() 19 : 20 CliCommand("list the team's threads", 21 "%s\n" 22 "Lists the team's threads.") 23 { 24 } 25 26 27 void 28 CliThreadsCommand::Execute(int argc, const char* const* argv, 29 CliContext& context) 30 { 31 Team* team = context.GetTeam(); 32 AutoLocker<Team> teamLocker(team); 33 34 printf(" ID state name\n"); 35 printf("----------------------------\n"); 36 37 for (ThreadList::ConstIterator it = team->Threads().GetIterator(); 38 Thread* thread = it.Next();) { 39 const char* stateString = UiUtils::ThreadStateToString( 40 thread->State(), thread->StoppedReason()); 41 printf("%10" B_PRId32 " %-9s \"%s\"", thread->ID(), stateString, 42 thread->Name()); 43 44 const BString& stoppedReason = thread->StoppedReasonInfo(); 45 if (thread->State() == THREAD_STATE_STOPPED 46 && !stoppedReason.IsEmpty()) { 47 printf(" (Reason: \"%s\")", stoppedReason.String()); 48 } 49 printf("\n"); 50 } 51 } 52