| //===-- CommandObjectStatus.cpp ---------------------------------*- C++ -*-===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #include "CommandObjectStatus.h" |
| |
| // C Includes |
| // C++ Includes |
| // Other libraries and framework includes |
| // Project includes |
| #include "CommandObjectThread.h" |
| |
| #include "lldb/Core/State.h" |
| |
| #include "lldb/Interpreter/CommandInterpreter.h" |
| #include "lldb/Interpreter/CommandReturnObject.h" |
| |
| #include "lldb/Target/Process.h" |
| #include "lldb/Target/Thread.h" |
| |
| using namespace lldb; |
| using namespace lldb_private; |
| |
| //------------------------------------------------------------------------- |
| // CommandObjectStatus |
| //------------------------------------------------------------------------- |
| |
| CommandObjectStatus::CommandObjectStatus () : |
| CommandObject ("status", |
| "Shows the current status and location of executing process.", |
| "status", |
| 0) |
| { |
| } |
| |
| CommandObjectStatus::~CommandObjectStatus() |
| { |
| } |
| |
| |
| bool |
| CommandObjectStatus::Execute |
| ( |
| Args& command, |
| CommandContext *context, |
| CommandInterpreter *interpreter, |
| CommandReturnObject &result |
| ) |
| { |
| StreamString &output_stream = result.GetOutputStream(); |
| result.SetStatus (eReturnStatusSuccessFinishNoResult); |
| ExecutionContext exe_ctx(context->GetExecutionContext()); |
| if (exe_ctx.process) |
| { |
| const StateType state = exe_ctx.process->GetState(); |
| if (StateIsStoppedState(state)) |
| { |
| if (state == eStateExited) |
| { |
| int exit_status = exe_ctx.process->GetExitStatus(); |
| const char *exit_description = exe_ctx.process->GetExitDescription(); |
| output_stream.Printf ("Process %d exited with status = %i (0x%8.8x) %s\n", |
| exe_ctx.process->GetID(), |
| exit_status, |
| exit_status, |
| exit_description ? exit_description : ""); |
| } |
| else |
| { |
| output_stream.Printf ("Process %d %s\n", exe_ctx.process->GetID(), StateAsCString (state)); |
| if (exe_ctx.thread == NULL) |
| exe_ctx.thread = exe_ctx.process->GetThreadList().GetThreadAtIndex(0).get(); |
| if (exe_ctx.thread != NULL) |
| { |
| DisplayThreadsInfo (interpreter, &exe_ctx, result, true, true); |
| } |
| else |
| { |
| result.AppendError ("No valid thread found in current process."); |
| result.SetStatus (eReturnStatusFailed); |
| } |
| } |
| } |
| } |
| else |
| { |
| result.AppendError ("No current location or status available."); |
| result.SetStatus (eReturnStatusFailed); |
| } |
| return result.Succeeded(); |
| } |
| |