diff options
Diffstat (limited to 'tools/lldb-mi/MICmdCmdStack.cpp')
| -rw-r--r-- | tools/lldb-mi/MICmdCmdStack.cpp | 1053 | 
1 files changed, 0 insertions, 1053 deletions
| diff --git a/tools/lldb-mi/MICmdCmdStack.cpp b/tools/lldb-mi/MICmdCmdStack.cpp deleted file mode 100644 index 599db37417f5..000000000000 --- a/tools/lldb-mi/MICmdCmdStack.cpp +++ /dev/null @@ -1,1053 +0,0 @@ -//===-- MICmdCmdStack.cpp ---------------------------------------*- C++ -*-===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -// Overview:    CMICmdCmdStackInfoDepth         implementation. -//              CMICmdCmdStackInfoFrame         implementation. -//              CMICmdCmdStackListFrames        implementation. -//              CMICmdCmdStackListArguments     implementation. -//              CMICmdCmdStackListLocals        implementation. -//              CMICmdCmdStackSelectFrame       implementation. - -// Third Party Headers: -#include "lldb/API/SBThread.h" - -// In-house headers: -#include "MICmdArgValListOfN.h" -#include "MICmdArgValNumber.h" -#include "MICmdArgValOptionLong.h" -#include "MICmdArgValOptionShort.h" -#include "MICmdArgValPrintValues.h" -#include "MICmdArgValString.h" -#include "MICmdArgValThreadGrp.h" -#include "MICmdCmdStack.h" -#include "MICmnLLDBDebugSessionInfo.h" -#include "MICmnLLDBDebugger.h" -#include "MICmnMIOutOfBandRecord.h" -#include "MICmnMIResultRecord.h" -#include "MICmnMIValueConst.h" - -#include <algorithm> - -//++ -// Details: CMICmdCmdStackInfoDepth constructor. -// Type:    Method. -// Args:    None. -// Return:  None. -// Throws:  None. -//-- -CMICmdCmdStackInfoDepth::CMICmdCmdStackInfoDepth() -    : m_nThreadFrames(0), m_constStrArgMaxDepth("max-depth") { -  // Command factory matches this name with that received from the stdin stream -  m_strMiCmd = "stack-info-depth"; - -  // Required by the CMICmdFactory when registering *this command -  m_pSelfCreatorFn = &CMICmdCmdStackInfoDepth::CreateSelf; -} - -//++ -// Details: CMICmdCmdStackInfoDepth destructor. -// Type:    Overrideable. -// Args:    None. -// Return:  None. -// Throws:  None. -//-- -CMICmdCmdStackInfoDepth::~CMICmdCmdStackInfoDepth() {} - -//++ -// Details: The invoker requires this function. The parses the command line -// options -//          arguments to extract values for each of those arguments. -// Type:    Overridden. -// Args:    None. -// Return:  MIstatus::success - Functional succeeded. -//          MIstatus::failure - Functional failed. -// Throws:  None. -//-- -bool CMICmdCmdStackInfoDepth::ParseArgs() { -  m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgMaxDepth, false, false)); -  return ParseValidateCmdOptions(); -} - -//++ -// Details: The invoker requires this function. The command does work in this -// function. -//          The command is likely to communicate with the LLDB SBDebugger in -//          here. -// Type:    Overridden. -// Args:    None. -// Return:  MIstatus::success - Functional succeeded. -//          MIstatus::failure - Functional failed. -// Throws:  None. -//-- -bool CMICmdCmdStackInfoDepth::Execute() { -  CMICMDBASE_GETOPTION(pArgThread, OptionLong, m_constStrArgThread); -  CMICMDBASE_GETOPTION(pArgMaxDepth, Number, m_constStrArgMaxDepth); - -  // Retrieve the --thread option's thread ID (only 1) -  MIuint64 nThreadId = UINT64_MAX; -  if (pArgThread->GetFound() && -      !pArgThread->GetExpectedOption<CMICmdArgValNumber, MIuint64>(nThreadId)) { -    SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_OPTION_NOT_FOUND), -                                   m_cmdData.strMiCmd.c_str(), -                                   m_constStrArgThread.c_str())); -    return MIstatus::failure; -  } - -  CMICmnLLDBDebugSessionInfo &rSessionInfo( -      CMICmnLLDBDebugSessionInfo::Instance()); -  lldb::SBProcess sbProcess = rSessionInfo.GetProcess(); -  lldb::SBThread thread = (nThreadId != UINT64_MAX) -                              ? sbProcess.GetThreadByIndexID(nThreadId) -                              : sbProcess.GetSelectedThread(); -  m_nThreadFrames = thread.GetNumFrames(); - -  return MIstatus::success; -} - -//++ -// Details: The invoker requires this function. The command prepares a MI Record -// Result -//          for the work carried out in the Execute(). -// Type:    Overridden. -// Args:    None. -// Return:  MIstatus::success - Functional succeeded. -//          MIstatus::failure - Functional failed. -// Throws:  None. -//-- -bool CMICmdCmdStackInfoDepth::Acknowledge() { -  const CMIUtilString strDepth(CMIUtilString::Format("%d", m_nThreadFrames)); -  const CMICmnMIValueConst miValueConst(strDepth); -  const CMICmnMIValueResult miValueResult("depth", miValueConst); -  const CMICmnMIResultRecord miRecordResult( -      m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done, -      miValueResult); -  m_miResultRecord = miRecordResult; - -  return MIstatus::success; -} - -//++ -// Details: Required by the CMICmdFactory when registering *this command. The -// factory -//          calls this function to create an instance of *this command. -// Type:    Static method. -// Args:    None. -// Return:  CMICmdBase * - Pointer to a new command. -// Throws:  None. -//-- -CMICmdBase *CMICmdCmdStackInfoDepth::CreateSelf() { -  return new CMICmdCmdStackInfoDepth(); -} - - -//++ -// Details: CMICmdCmdStackInfoFrame constructor. -// Type:    Method. -// Args:    None. -// Return:  None. -// Throws:  None. -//-- -CMICmdCmdStackInfoFrame::CMICmdCmdStackInfoFrame() { -  // Command factory matches this name with that received from the stdin stream -  m_strMiCmd = "stack-info-frame"; - -  // Required by the CMICmdFactory when registering *this command -  m_pSelfCreatorFn = &CMICmdCmdStackInfoFrame::CreateSelf; -} - -//++ -// Details: CMICmdCmdStackInfoFrame destructor. -// Type:    Overrideable. -// Args:    None. -// Return:  None. -// Throws:  None. -//-- -CMICmdCmdStackInfoFrame::~CMICmdCmdStackInfoFrame() {} - -//++ -// Details: The invoker requires this function. The parses the command line -// options -//          arguments to extract values for each of those arguments. -// Type:    Overridden. -// Args:    None. -// Return:  MIstatus::success - Function succeeded. -//          MIstatus::failure - Function failed. -// Throws:  None. -//-- -bool CMICmdCmdStackInfoFrame::ParseArgs() { return ParseValidateCmdOptions(); } - -//++ -// Details: The invoker requires this function. The command does work in this -// function. -//          The command is likely to communicate with the LLDB SBDebugger in -//          here. -// Type:    Overridden. -// Args:    None. -// Return:  MIstatus::success - Function succeeded. -//          MIstatus::failure - Function failed. -// Throws:  None. -//-- -bool CMICmdCmdStackInfoFrame::Execute() { -  CMICmnLLDBDebugSessionInfo &rSessionInfo( -      CMICmnLLDBDebugSessionInfo::Instance()); -  lldb::SBProcess sbProcess = rSessionInfo.GetProcess(); -  if (!sbProcess.IsValid()) { -    SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_INVALID_PROCESS), -                                   m_cmdData.strMiCmd.c_str())); -    return MIstatus::failure; -  } - -  lldb::SBThread sbThread = sbProcess.GetSelectedThread(); -  MIuint nFrameId = sbThread.GetSelectedFrame().GetFrameID(); -  if (!rSessionInfo.MIResponseFormFrameInfo( -          sbThread, nFrameId, -          CMICmnLLDBDebugSessionInfo::eFrameInfoFormat_NoArguments, -          m_miValueTuple)) -    return MIstatus::failure; - -  return MIstatus::success; -} - -//++ -// Details: The invoker requires this function. The command prepares a MI Record -// Result -//          for the work carried out in the Execute(). -// Type:    Overridden. -// Args:    None. -// Return:  MIstatus::success - Function succeeded. -//          MIstatus::failure - Function failed. -// Throws:  None. -//-- -bool CMICmdCmdStackInfoFrame::Acknowledge() { -  const CMICmnMIValueResult miValueResult("frame", m_miValueTuple); -  const CMICmnMIResultRecord miRecordResult( -      m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done, -      miValueResult); -  m_miResultRecord = miRecordResult; - -  return MIstatus::success; -} - -//++ -// Details: Required by the CMICmdFactory when registering *this command. The -// factory -//          calls this function to create an instance of *this command. -// Type:    Static method. -// Args:    None. -// Return:  CMICmdBase * - Pointer to a new command. -// Throws:  None. -//-- -CMICmdBase *CMICmdCmdStackInfoFrame::CreateSelf() { -  return new CMICmdCmdStackInfoFrame(); -} - - -//++ -// Details: CMICmdCmdStackListFrames constructor. -// Type:    Method. -// Args:    None. -// Return:  None. -// Throws:  None. -//-- -CMICmdCmdStackListFrames::CMICmdCmdStackListFrames() -    : m_nThreadFrames(0), m_constStrArgFrameLow("low-frame"), -      m_constStrArgFrameHigh("high-frame") { -  // Command factory matches this name with that received from the stdin stream -  m_strMiCmd = "stack-list-frames"; - -  // Required by the CMICmdFactory when registering *this command -  m_pSelfCreatorFn = &CMICmdCmdStackListFrames::CreateSelf; -} - -//++ -// Details: CMICmdCmdStackListFrames destructor. -// Type:    Overrideable. -// Args:    None. -// Return:  None. -// Throws:  None. -//-- -CMICmdCmdStackListFrames::~CMICmdCmdStackListFrames() { -  m_vecMIValueResult.clear(); -} - -//++ -// Details: The invoker requires this function. The parses the command line -// options -//          arguments to extract values for each of those arguments. -// Type:    Overridden. -// Args:    None. -// Return:  MIstatus::success - Functional succeeded. -//          MIstatus::failure - Functional failed. -// Throws:  None. -//-- -bool CMICmdCmdStackListFrames::ParseArgs() { -  m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgFrameLow, false, true)); -  m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgFrameHigh, false, true)); -  return ParseValidateCmdOptions(); -} - -//++ -// Details: The invoker requires this function. The command does work in this -// function. -//          The command is likely to communicate with the LLDB SBDebugger in -//          here. -// Type:    Overridden. -// Args:    None. -// Return:  MIstatus::success - Functional succeeded. -//          MIstatus::failure - Functional failed. -// Throws:  None. -//-- -bool CMICmdCmdStackListFrames::Execute() { -  CMICMDBASE_GETOPTION(pArgThread, OptionLong, m_constStrArgThread); -  CMICMDBASE_GETOPTION(pArgFrameLow, Number, m_constStrArgFrameLow); -  CMICMDBASE_GETOPTION(pArgFrameHigh, Number, m_constStrArgFrameHigh); - -  // Retrieve the --thread option's thread ID (only 1) -  MIuint64 nThreadId = UINT64_MAX; -  if (pArgThread->GetFound() && -      !pArgThread->GetExpectedOption<CMICmdArgValNumber, MIuint64>(nThreadId)) { -    SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_OPTION_NOT_FOUND), -                                   m_cmdData.strMiCmd.c_str(), -                                   m_constStrArgThread.c_str())); -    return MIstatus::failure; -  } - -  // Frame low and high options are not mandatory -  MIuint nFrameHigh = -      pArgFrameHigh->GetFound() ? pArgFrameHigh->GetValue() : UINT32_MAX; -  const MIuint nFrameLow = -      pArgFrameLow->GetFound() ? pArgFrameLow->GetValue() : 0; - -  CMICmnLLDBDebugSessionInfo &rSessionInfo( -      CMICmnLLDBDebugSessionInfo::Instance()); -  lldb::SBProcess sbProcess = rSessionInfo.GetProcess(); -  lldb::SBThread thread = (nThreadId != UINT64_MAX) -                              ? sbProcess.GetThreadByIndexID(nThreadId) -                              : sbProcess.GetSelectedThread(); -  MIuint nThreadFrames = thread.GetNumFrames(); - -  // Adjust nThreadFrames for the nFrameHigh argument as we use nFrameHigh+1 in -  // the min calc as the arg -  // is not an index, but a frame id value. -  if (nFrameHigh < UINT32_MAX) { -    nFrameHigh++; -    nThreadFrames = (nFrameHigh < nThreadFrames) ? nFrameHigh : nThreadFrames; -  } - -  m_nThreadFrames = nThreadFrames; -  if (nThreadFrames == 0) -    return MIstatus::success; - -  m_vecMIValueResult.clear(); -  for (MIuint nLevel = nFrameLow; nLevel < nThreadFrames; nLevel++) { -    CMICmnMIValueTuple miValueTuple; -    if (!rSessionInfo.MIResponseFormFrameInfo( -            thread, nLevel, -            CMICmnLLDBDebugSessionInfo::eFrameInfoFormat_NoArguments, -            miValueTuple)) -      return MIstatus::failure; - -    const CMICmnMIValueResult miValueResult8("frame", miValueTuple); -    m_vecMIValueResult.push_back(miValueResult8); -  } - -  return MIstatus::success; -} - -//++ -// Details: The invoker requires this function. The command prepares a MI Record -// Result -//          for the work carried out in the Execute(). -// Type:    Overridden. -// Args:    None. -// Return:  MIstatus::success - Functional succeeded. -//          MIstatus::failure - Functional failed. -// Throws:  None. -//-- -bool CMICmdCmdStackListFrames::Acknowledge() { -  if (m_nThreadFrames == 0) { -    // MI print "3^done,stack=[{}]" -    const CMICmnMIValueTuple miValueTuple; -    const CMICmnMIValueList miValueList(miValueTuple); -    const CMICmnMIValueResult miValueResult("stack", miValueList); -    const CMICmnMIResultRecord miRecordResult( -        m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done, -        miValueResult); -    m_miResultRecord = miRecordResult; - -    return MIstatus::success; -  } - -  // Build up a list of thread information from tuples -  VecMIValueResult_t::const_iterator it = m_vecMIValueResult.begin(); -  if (it == m_vecMIValueResult.end()) { -    // MI print "3^done,stack=[{}]" -    const CMICmnMIValueTuple miValueTuple; -    const CMICmnMIValueList miValueList(miValueTuple); -    const CMICmnMIValueResult miValueResult("stack", miValueList); -    const CMICmnMIResultRecord miRecordResult( -        m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done, -        miValueResult); -    m_miResultRecord = miRecordResult; -    return MIstatus::success; -  } -  CMICmnMIValueList miValueList(*it); -  ++it; -  while (it != m_vecMIValueResult.end()) { -    const CMICmnMIValueResult &rTuple(*it); -    miValueList.Add(rTuple); - -    // Next -    ++it; -  } -  const CMICmnMIValueResult miValueResult("stack", miValueList); -  const CMICmnMIResultRecord miRecordResult( -      m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done, -      miValueResult); -  m_miResultRecord = miRecordResult; - -  return MIstatus::success; -} - -//++ -// Details: Required by the CMICmdFactory when registering *this command. The -// factory -//          calls this function to create an instance of *this command. -// Type:    Static method. -// Args:    None. -// Return:  CMICmdBase * - Pointer to a new command. -// Throws:  None. -//-- -CMICmdBase *CMICmdCmdStackListFrames::CreateSelf() { -  return new CMICmdCmdStackListFrames(); -} - - -//++ -// Details: CMICmdCmdStackListArguments constructor. -// Type:    Method. -// Args:    None. -// Return:  None. -// Throws:  None. -//-- -CMICmdCmdStackListArguments::CMICmdCmdStackListArguments() -    : m_bThreadInvalid(false), m_miValueList(true), -      m_constStrArgPrintValues("print-values"), -      m_constStrArgFrameLow("low-frame"), m_constStrArgFrameHigh("high-frame") { -  // Command factory matches this name with that received from the stdin stream -  m_strMiCmd = "stack-list-arguments"; - -  // Required by the CMICmdFactory when registering *this command -  m_pSelfCreatorFn = &CMICmdCmdStackListArguments::CreateSelf; -} - -//++ -// Details: CMICmdCmdStackListArguments destructor. -// Type:    Overrideable. -// Args:    None. -// Return:  None. -// Throws:  None. -//-- -CMICmdCmdStackListArguments::~CMICmdCmdStackListArguments() {} - -//++ -// Details: The invoker requires this function. The parses the command line -// options -//          arguments to extract values for each of those arguments. -// Type:    Overridden. -// Args:    None. -// Return:  MIstatus::success - Functional succeeded. -//          MIstatus::failure - Functional failed. -// Throws:  None. -//-- -bool CMICmdCmdStackListArguments::ParseArgs() { -  m_setCmdArgs.Add( -      new CMICmdArgValPrintValues(m_constStrArgPrintValues, true, true)); -  m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgFrameLow, false, true)); -  m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgFrameHigh, false, true)); -  return ParseValidateCmdOptions(); -} - -//++ -// Details: The invoker requires this function. The command does work in this -// function. -//          The command is likely to communicate with the LLDB SBDebugger in -//          here. -// Type:    Overridden. -// Args:    None. -// Return:  MIstatus::success - Functional succeeded. -//          MIstatus::failure - Functional failed. -// Throws:  None. -//-- -bool CMICmdCmdStackListArguments::Execute() { -  CMICMDBASE_GETOPTION(pArgThread, OptionLong, m_constStrArgThread); -  CMICMDBASE_GETOPTION(pArgPrintValues, PrintValues, m_constStrArgPrintValues); -  CMICMDBASE_GETOPTION(pArgFrameLow, Number, m_constStrArgFrameLow); -  CMICMDBASE_GETOPTION(pArgFrameHigh, Number, m_constStrArgFrameHigh); - -  // Retrieve the --thread option's thread ID (only 1) -  MIuint64 nThreadId = UINT64_MAX; -  if (pArgThread->GetFound()) { -    if (!pArgThread->GetExpectedOption<CMICmdArgValNumber, MIuint64>( -            nThreadId)) { -      SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_OPTION_NOT_FOUND), -                                     m_cmdData.strMiCmd.c_str(), -                                     m_constStrArgThread.c_str())); -      return MIstatus::failure; -    } -  } - -  const CMICmnLLDBDebugSessionInfo::VariableInfoFormat_e eVarInfoFormat = -      static_cast<CMICmnLLDBDebugSessionInfo::VariableInfoFormat_e>( -          pArgPrintValues->GetValue()); - -  MIuint nFrameLow = 0; -  MIuint nFrameHigh = UINT32_MAX; -  if (pArgFrameLow->GetFound() && pArgFrameHigh->GetFound()) { -    nFrameLow = pArgFrameLow->GetValue(); -    nFrameHigh = pArgFrameHigh->GetValue() + 1; -  } else if (pArgFrameLow->GetFound() || pArgFrameHigh->GetFound()) { -    // Only low-frame or high-frame was specified but both are required -    SetError( -        CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_THREAD_FRAME_RANGE_INVALID), -                              m_cmdData.strMiCmd.c_str())); -    return MIstatus::failure; -  } - -  CMICmnLLDBDebugSessionInfo &rSessionInfo( -      CMICmnLLDBDebugSessionInfo::Instance()); -  lldb::SBProcess sbProcess = rSessionInfo.GetProcess(); -  lldb::SBThread thread = (nThreadId != UINT64_MAX) -                              ? sbProcess.GetThreadByIndexID(nThreadId) -                              : sbProcess.GetSelectedThread(); -  m_bThreadInvalid = !thread.IsValid(); -  if (m_bThreadInvalid) -    return MIstatus::success; - -  const lldb::StopReason eStopReason = thread.GetStopReason(); -  if ((eStopReason == lldb::eStopReasonNone) || -      (eStopReason == lldb::eStopReasonInvalid)) { -    m_bThreadInvalid = true; -    return MIstatus::success; -  } - -  const MIuint nFrames = thread.GetNumFrames(); -  if (nFrameLow >= nFrames) { -    // The low-frame is larger than the actual number of frames -    SetError( -        CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_THREAD_FRAME_RANGE_INVALID), -                              m_cmdData.strMiCmd.c_str())); -    return MIstatus::failure; -  } - -  nFrameHigh = std::min(nFrameHigh, nFrames); -  for (MIuint i = nFrameLow; i < nFrameHigh; i++) { -    lldb::SBFrame frame = thread.GetFrameAtIndex(i); -    CMICmnMIValueList miValueList(true); -    const MIuint maskVarTypes = -        CMICmnLLDBDebugSessionInfo::eVariableType_Arguments; -    if (!rSessionInfo.MIResponseFormVariableInfo(frame, maskVarTypes, -                                                 eVarInfoFormat, miValueList)) -      return MIstatus::failure; -    const CMICmnMIValueConst miValueConst(CMIUtilString::Format("%d", i)); -    const CMICmnMIValueResult miValueResult("level", miValueConst); -    CMICmnMIValueTuple miValueTuple(miValueResult); -    const CMICmnMIValueResult miValueResult2("args", miValueList); -    miValueTuple.Add(miValueResult2); -    const CMICmnMIValueResult miValueResult3("frame", miValueTuple); -    m_miValueList.Add(miValueResult3); -  } - -  return MIstatus::success; -} - -//++ -// Details: The invoker requires this function. The command prepares a MI Record -// Result -//          for the work carried out in the Execute(). -// Type:    Overridden. -// Args:    None. -// Return:  MIstatus::success - Functional succeeded. -//          MIstatus::failure - Functional failed. -// Throws:  None. -//-- -bool CMICmdCmdStackListArguments::Acknowledge() { -  if (m_bThreadInvalid) { -    // MI print "%s^done,stack-args=[]" -    const CMICmnMIValueList miValueList(true); -    const CMICmnMIValueResult miValueResult("stack-args", miValueList); -    const CMICmnMIResultRecord miRecordResult( -        m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done, -        miValueResult); -    m_miResultRecord = miRecordResult; -    return MIstatus::success; -  } - -  // MI print -  // "%s^done,stack-args=[frame={level=\"0\",args=[%s]},frame={level=\"1\",args=[%s]}]" -  const CMICmnMIValueResult miValueResult4("stack-args", m_miValueList); -  const CMICmnMIResultRecord miRecordResult( -      m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done, -      miValueResult4); -  m_miResultRecord = miRecordResult; - -  return MIstatus::success; -} - -//++ -// Details: Required by the CMICmdFactory when registering *this command. The -// factory -//          calls this function to create an instance of *this command. -// Type:    Static method. -// Args:    None. -// Return:  CMICmdBase * - Pointer to a new command. -// Throws:  None. -//-- -CMICmdBase *CMICmdCmdStackListArguments::CreateSelf() { -  return new CMICmdCmdStackListArguments(); -} - - -//++ -// Details: CMICmdCmdStackListLocals constructor. -// Type:    Method. -// Args:    None. -// Return:  None. -// Throws:  None. -//-- -CMICmdCmdStackListLocals::CMICmdCmdStackListLocals() -    : m_bThreadInvalid(false), m_miValueList(true), -      m_constStrArgPrintValues("print-values") { -  // Command factory matches this name with that received from the stdin stream -  m_strMiCmd = "stack-list-locals"; - -  // Required by the CMICmdFactory when registering *this command -  m_pSelfCreatorFn = &CMICmdCmdStackListLocals::CreateSelf; -} - -//++ -// Details: CMICmdCmdStackListLocals destructor. -// Type:    Overrideable. -// Args:    None. -// Return:  None. -// Throws:  None. -//-- -CMICmdCmdStackListLocals::~CMICmdCmdStackListLocals() {} - -//++ -// Details: The invoker requires this function. The parses the command line -// options -//          arguments to extract values for each of those arguments. -// Type:    Overridden. -// Args:    None. -// Return:  MIstatus::success - Functional succeeded. -//          MIstatus::failure - Functional failed. -// Throws:  None. -//-- -bool CMICmdCmdStackListLocals::ParseArgs() { -  m_setCmdArgs.Add( -      new CMICmdArgValPrintValues(m_constStrArgPrintValues, true, true)); -  return ParseValidateCmdOptions(); -} - -//++ -// Details: The invoker requires this function. The command does work in this -// function. -//          The command is likely to communicate with the LLDB SBDebugger in -//          here. -// Type:    Overridden. -// Args:    None. -// Return:  MIstatus::success - Functional succeeded. -//          MIstatus::failure - Functional failed. -// Throws:  None. -//-- -bool CMICmdCmdStackListLocals::Execute() { -  CMICMDBASE_GETOPTION(pArgThread, OptionLong, m_constStrArgThread); -  CMICMDBASE_GETOPTION(pArgFrame, OptionLong, m_constStrArgFrame); -  CMICMDBASE_GETOPTION(pArgPrintValues, PrintValues, m_constStrArgPrintValues); - -  // Retrieve the --thread option's thread ID (only 1) -  MIuint64 nThreadId = UINT64_MAX; -  if (pArgThread->GetFound()) { -    if (!pArgThread->GetExpectedOption<CMICmdArgValNumber, MIuint64>( -            nThreadId)) { -      SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_OPTION_NOT_FOUND), -                                     m_cmdData.strMiCmd.c_str(), -                                     m_constStrArgThread.c_str())); -      return MIstatus::failure; -    } -  } - -  MIuint64 nFrame = UINT64_MAX; -  if (pArgFrame->GetFound()) { -    if (!pArgFrame->GetExpectedOption<CMICmdArgValNumber, MIuint64>(nFrame)) { -      SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_OPTION_NOT_FOUND), -                                     m_cmdData.strMiCmd.c_str(), -                                     m_constStrArgFrame.c_str())); -      return MIstatus::failure; -    } -  } - -  const CMICmnLLDBDebugSessionInfo::VariableInfoFormat_e eVarInfoFormat = -      static_cast<CMICmnLLDBDebugSessionInfo::VariableInfoFormat_e>( -          pArgPrintValues->GetValue()); - -  CMICmnLLDBDebugSessionInfo &rSessionInfo( -      CMICmnLLDBDebugSessionInfo::Instance()); -  lldb::SBProcess sbProcess = rSessionInfo.GetProcess(); -  lldb::SBThread thread = (nThreadId != UINT64_MAX) -                              ? sbProcess.GetThreadByIndexID(nThreadId) -                              : sbProcess.GetSelectedThread(); -  m_bThreadInvalid = !thread.IsValid(); -  if (m_bThreadInvalid) -    return MIstatus::success; - -  const lldb::StopReason eStopReason = thread.GetStopReason(); -  if ((eStopReason == lldb::eStopReasonNone) || -      (eStopReason == lldb::eStopReasonInvalid)) { -    m_bThreadInvalid = true; -    return MIstatus::success; -  } - -  lldb::SBFrame frame = (nFrame != UINT64_MAX) ? thread.GetFrameAtIndex(nFrame) -                                               : thread.GetSelectedFrame(); - -  CMICmnMIValueList miValueList(true); -  const MIuint maskVarTypes = CMICmnLLDBDebugSessionInfo::eVariableType_Locals | -                              CMICmnLLDBDebugSessionInfo::eVariableType_InScope; -  if (!rSessionInfo.MIResponseFormVariableInfo(frame, maskVarTypes, -                                               eVarInfoFormat, miValueList)) -    return MIstatus::failure; - -  m_miValueList = miValueList; - -  return MIstatus::success; -} - -//++ -// Details: The invoker requires this function. The command prepares a MI Record -// Result -//          for the work carried out in the Execute(). -// Type:    Overridden. -// Args:    None. -// Return:  MIstatus::success - Functional succeeded. -//          MIstatus::failure - Functional failed. -// Throws:  None. -//-- -bool CMICmdCmdStackListLocals::Acknowledge() { -  if (m_bThreadInvalid) { -    // MI print "%s^done,locals=[]" -    const CMICmnMIValueList miValueList(true); -    const CMICmnMIValueResult miValueResult("locals", miValueList); -    const CMICmnMIResultRecord miRecordResult( -        m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done, -        miValueResult); -    m_miResultRecord = miRecordResult; -    return MIstatus::success; -  } - -  // MI print "%s^done,locals=[%s]" -  const CMICmnMIValueResult miValueResult("locals", m_miValueList); -  const CMICmnMIResultRecord miRecordResult( -      m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done, -      miValueResult); -  m_miResultRecord = miRecordResult; - -  return MIstatus::success; -} - -//++ -// Details: Required by the CMICmdFactory when registering *this command. The -// factory -//          calls this function to create an instance of *this command. -// Type:    Static method. -// Args:    None. -// Return:  CMICmdBase * - Pointer to a new command. -// Throws:  None. -//-- -CMICmdBase *CMICmdCmdStackListLocals::CreateSelf() { -  return new CMICmdCmdStackListLocals(); -} - - -//++ -// Details: CMICmdCmdStackListVariables constructor. -// Type:    Method. -// Args:    None. -// Return:  None. -// Throws:  None. -//-- -CMICmdCmdStackListVariables::CMICmdCmdStackListVariables() -    : m_bThreadInvalid(false), m_miValueList(true), -      m_constStrArgPrintValues("print-values") { -  // Command factory matches this name with that received from the stdin stream -  m_strMiCmd = "stack-list-variables"; - -  // Required by the CMICmdFactory when registering *this command -  m_pSelfCreatorFn = &CMICmdCmdStackListVariables::CreateSelf; -} - -//++ -// Details: CMICmdCmdStackListVariables destructor. -// Type:    Overrideable. -// Args:    None. -// Return:  None. -// Throws:  None. -//-- -CMICmdCmdStackListVariables::~CMICmdCmdStackListVariables() {} - -//++ -// Details: The invoker requires this function. The parses the command line -// options -//          arguments to extract values for each of those arguments. -// Type:    Overridden. -// Args:    None. -// Return:  MIstatus::success - Functional succeeded. -//          MIstatus::failure - Functional failed. -// Throws:  None. -//-- -bool CMICmdCmdStackListVariables::ParseArgs() { -  m_setCmdArgs.Add( -      new CMICmdArgValPrintValues(m_constStrArgPrintValues, true, true)); -  return ParseValidateCmdOptions(); -} - -//++ -// Details: The invoker requires this function. The command does work in this -// function. -//          The command is likely to communicate with the LLDB SBDebugger in -//          here. -// Type:    Overridden. -// Args:    None. -// Return:  MIstatus::success - Functional succeeded. -//          MIstatus::failure - Functional failed. -// Throws:  None. -//-- -bool CMICmdCmdStackListVariables::Execute() { -  CMICMDBASE_GETOPTION(pArgThread, OptionLong, m_constStrArgThread); -  CMICMDBASE_GETOPTION(pArgFrame, OptionLong, m_constStrArgFrame); -  CMICMDBASE_GETOPTION(pArgPrintValues, PrintValues, m_constStrArgPrintValues); - -  // Retrieve the --thread option's thread ID (only 1) -  MIuint64 nThreadId = UINT64_MAX; -  if (pArgThread->GetFound()) { -    if (!pArgThread->GetExpectedOption<CMICmdArgValNumber, MIuint64>( -            nThreadId)) { -      SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_OPTION_NOT_FOUND), -                                     m_cmdData.strMiCmd.c_str(), -                                     m_constStrArgThread.c_str())); -      return MIstatus::failure; -    } -  } - -  MIuint64 nFrame = UINT64_MAX; -  if (pArgFrame->GetFound()) { -    if (!pArgFrame->GetExpectedOption<CMICmdArgValNumber, MIuint64>(nFrame)) { -      SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_OPTION_NOT_FOUND), -                                     m_cmdData.strMiCmd.c_str(), -                                     m_constStrArgFrame.c_str())); -      return MIstatus::failure; -    } -  } - -  const CMICmnLLDBDebugSessionInfo::VariableInfoFormat_e eVarInfoFormat = -      static_cast<CMICmnLLDBDebugSessionInfo::VariableInfoFormat_e>( -          pArgPrintValues->GetValue()); - -  CMICmnLLDBDebugSessionInfo &rSessionInfo( -      CMICmnLLDBDebugSessionInfo::Instance()); -  lldb::SBProcess sbProcess = rSessionInfo.GetProcess(); -  lldb::SBThread thread = (nThreadId != UINT64_MAX) -                              ? sbProcess.GetThreadByIndexID(nThreadId) -                              : sbProcess.GetSelectedThread(); -  m_bThreadInvalid = !thread.IsValid(); -  if (m_bThreadInvalid) -    return MIstatus::success; - -  const lldb::StopReason eStopReason = thread.GetStopReason(); -  if ((eStopReason == lldb::eStopReasonNone) || -      (eStopReason == lldb::eStopReasonInvalid)) { -    m_bThreadInvalid = true; -    return MIstatus::success; -  } - -  lldb::SBFrame frame = (nFrame != UINT64_MAX) ? thread.GetFrameAtIndex(nFrame) -                                               : thread.GetSelectedFrame(); - -  CMICmnMIValueList miValueList(true); -  const MIuint maskVarTypes = -      CMICmnLLDBDebugSessionInfo::eVariableType_Arguments | -      CMICmnLLDBDebugSessionInfo::eVariableType_Locals | -      CMICmnLLDBDebugSessionInfo::eVariableType_InScope; -  if (!rSessionInfo.MIResponseFormVariableInfo( -          frame, maskVarTypes, eVarInfoFormat, miValueList, 10, true)) -    return MIstatus::failure; -  m_miValueList = miValueList; - -  return MIstatus::success; -} - -//++ -// Details: The invoker requires this function. The command prepares a MI Record -// Result -//          for the work carried out in the Execute(). -// Type:    Overridden. -// Args:    None. -// Return:  MIstatus::success - Functional succeeded. -//          MIstatus::failure - Functional failed. -// Throws:  None. -//-- -bool CMICmdCmdStackListVariables::Acknowledge() { -  if (m_bThreadInvalid) { -    // MI print "%s^done,variables=[]" -    const CMICmnMIValueList miValueList(true); -    const CMICmnMIValueResult miValueResult("variables", miValueList); -    const CMICmnMIResultRecord miRecordResult( -        m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done, -        miValueResult); -    m_miResultRecord = miRecordResult; -    return MIstatus::success; -  } - -  // MI print "%s^done,variables=[%s]" -  const CMICmnMIValueResult miValueResult("variables", m_miValueList); -  const CMICmnMIResultRecord miRecordResult( -      m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done, -      miValueResult); -  m_miResultRecord = miRecordResult; - -  return MIstatus::success; -} - -//++ -// Details: Required by the CMICmdFactory when registering *this command. The -// factory -//          calls this function to create an instance of *this command. -// Type:    Static method. -// Args:    None. -// Return:  CMICmdBase * - Pointer to a new command. -// Throws:  None. -//-- -CMICmdBase *CMICmdCmdStackListVariables::CreateSelf() { -  return new CMICmdCmdStackListVariables(); -} - - -//++ -// Details: CMICmdCmdStackSelectFrame constructor. -// Type:    Method. -// Args:    None. -// Return:  None. -// Throws:  None. -//-- -CMICmdCmdStackSelectFrame::CMICmdCmdStackSelectFrame() -    : m_bFrameInvalid(false), m_constStrArgFrameId("frame_id") { -  // Command factory matches this name with that received from the stdin stream -  m_strMiCmd = "stack-select-frame"; - -  // Required by the CMICmdFactory when registering *this command -  m_pSelfCreatorFn = &CMICmdCmdStackSelectFrame::CreateSelf; -} - -//++ -// Details: CMICmdCmdStackSelectFrame destructor. -// Type:    Overrideable. -// Args:    None. -// Return:  None. -// Throws:  None. -//-- -CMICmdCmdStackSelectFrame::~CMICmdCmdStackSelectFrame() {} - -//++ -// Details: The invoker requires this function. The parses the command line -// options -//          arguments to extract values for each of those arguments. -// Type:    Overridden. -// Args:    None. -// Return:  MIstatus::success - Function succeeded. -//          MIstatus::failure - Function failed. -// Throws:  None. -//-- -bool CMICmdCmdStackSelectFrame::ParseArgs() { -  m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgFrameId, true, false)); -  return ParseValidateCmdOptions(); -} - -//++ -// Details: The invoker requires this function. The command does work in this -// function. -//          The command is likely to communicate with the LLDB SBDebugger in -//          here. -// Type:    Overridden. -// Args:    None. -// Return:  MIstatus::success - Function succeeded. -//          MIstatus::failure - Function failed. -// Throws:  None. -//-- -bool CMICmdCmdStackSelectFrame::Execute() { -  CMICMDBASE_GETOPTION(pArgFrame, Number, m_constStrArgFrameId); - -  CMICmnLLDBDebugSessionInfo &rSessionInfo( -      CMICmnLLDBDebugSessionInfo::Instance()); -  lldb::SBThread sbThread = rSessionInfo.GetProcess().GetSelectedThread(); - -  const MIuint nFrameId = pArgFrame->GetValue(); -  m_bFrameInvalid = (nFrameId >= sbThread.GetNumFrames()); -  if (m_bFrameInvalid) -    return MIstatus::success; - -  lldb::SBFrame sbFrame = sbThread.SetSelectedFrame(nFrameId); -  m_bFrameInvalid = !sbFrame.IsValid(); - -  return MIstatus::success; -} - -//++ -// Details: The invoker requires this function. The command prepares a MI Record -// Result -//          for the work carried out in the Execute(). -// Type:    Overridden. -// Args:    None. -// Return:  MIstatus::success - Function succeeded. -//          MIstatus::failure - Function failed. -// Throws:  None. -//-- -bool CMICmdCmdStackSelectFrame::Acknowledge() { -  if (m_bFrameInvalid) { -    // MI print "%s^error,msg=\"Command '-stack-select-frame'. Frame ID -    // invalid\"" -    const CMICmnMIValueConst miValueConst(CMIUtilString::Format( -        MIRSRC(IDS_CMD_ERR_FRAME_INVALID), m_cmdData.strMiCmd.c_str())); -    const CMICmnMIValueResult miValueResult("msg", miValueConst); -    const CMICmnMIResultRecord miRecordResult( -        m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error, -        miValueResult); -    m_miResultRecord = miRecordResult; - -    return MIstatus::success; -  } - -  const CMICmnMIResultRecord miRecordResult( -      m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done); -  m_miResultRecord = miRecordResult; - -  return MIstatus::success; -} - -//++ -// Details: Required by the CMICmdFactory when registering *this command. The -// factory -//          calls this function to create an instance of *this command. -// Type:    Static method. -// Args:    None. -// Return:  CMICmdBase * - Pointer to a new command. -// Throws:  None. -//-- -CMICmdBase *CMICmdCmdStackSelectFrame::CreateSelf() { -  return new CMICmdCmdStackSelectFrame(); -} | 
