diff options
Diffstat (limited to 'lldb/tools/lldb-mi/MICmnLLDBDebugSessionInfo.h')
-rw-r--r-- | lldb/tools/lldb-mi/MICmnLLDBDebugSessionInfo.h | 404 |
1 files changed, 216 insertions, 188 deletions
diff --git a/lldb/tools/lldb-mi/MICmnLLDBDebugSessionInfo.h b/lldb/tools/lldb-mi/MICmnLLDBDebugSessionInfo.h index dbad0c8..818df3b 100644 --- a/lldb/tools/lldb-mi/MICmnLLDBDebugSessionInfo.h +++ b/lldb/tools/lldb-mi/MICmnLLDBDebugSessionInfo.h @@ -10,19 +10,19 @@ #pragma once // Third party headers: -#include <map> -#include <vector> #include "lldb/API/SBDebugger.h" #include "lldb/API/SBListener.h" #include "lldb/API/SBProcess.h" #include "lldb/API/SBTarget.h" +#include <map> +#include <vector> // In-house headers: #include "MICmnBase.h" -#include "MIUtilSingletonBase.h" #include "MICmnLLDBDebugSessionInfoVarObj.h" #include "MICmnMIValueTuple.h" #include "MIUtilMapIdToVariant.h" +#include "MIUtilSingletonBase.h" #include "MIUtilThreadBaseStd.h" // Declarations: @@ -31,7 +31,8 @@ struct SMICmdData; class CMICmnMIValueTuple; class CMICmnMIValueList; -//++ ============================================================================ +//++ +//============================================================================ // Details: MI debug session object that holds debugging information between // instances of MI commands executing their work and producing MI // result records. Information/data is set by one or many commands then @@ -39,186 +40,214 @@ class CMICmnMIValueList; // It primarily holds LLDB type objects. // A singleton class. //-- -class CMICmnLLDBDebugSessionInfo : public CMICmnBase, public MI::ISingleton<CMICmnLLDBDebugSessionInfo> -{ - friend class MI::ISingleton<CMICmnLLDBDebugSessionInfo>; +class CMICmnLLDBDebugSessionInfo + : public CMICmnBase, + public MI::ISingleton<CMICmnLLDBDebugSessionInfo> { + friend class MI::ISingleton<CMICmnLLDBDebugSessionInfo>; - // Structs: - public: - //++ ============================================================================ - // Details: Break point information object. Used to easily pass information about - // a break around and record break point information to be recalled by - // other commands or LLDB event handling functions. - //-- - struct SBrkPtInfo - { - SBrkPtInfo() - : m_id(0) - , m_bDisp(false) - , m_bEnabled(false) - , m_pc(0) - , m_nLine(0) - , m_bHaveArgOptionThreadGrp(false) - , m_nTimes(0) - , m_bPending(false) - , m_nIgnore(0) - , m_bCondition(false) - , m_bBrkPtThreadId(false) - , m_nBrkPtThreadId(0) - { - } + // Structs: +public: + //++ + //============================================================================ + // Details: Break point information object. Used to easily pass information + // about + // a break around and record break point information to be recalled + // by + // other commands or LLDB event handling functions. + //-- + struct SBrkPtInfo { + SBrkPtInfo() + : m_id(0), m_bDisp(false), m_bEnabled(false), m_pc(0), m_nLine(0), + m_bHaveArgOptionThreadGrp(false), m_nTimes(0), m_bPending(false), + m_nIgnore(0), m_bCondition(false), m_bBrkPtThreadId(false), + m_nBrkPtThreadId(0) {} - MIuint m_id; // LLDB break point ID. - CMIUtilString m_strType; // Break point type. - bool m_bDisp; // True = "del", false = "keep". - bool m_bEnabled; // True = enabled, false = disabled break point. - lldb::addr_t m_pc; // Address number. - CMIUtilString m_fnName; // Function name. - CMIUtilString m_fileName; // File name text. - CMIUtilString m_path; // Full file name and path text. - MIuint m_nLine; // File line number. - bool m_bHaveArgOptionThreadGrp; // True = include MI field, false = do not include "thread-groups". - CMIUtilString m_strOptThrdGrp; // Thread group number. - MIuint m_nTimes; // The count of the breakpoint existence. - CMIUtilString m_strOrigLoc; // The name of the break point. - bool m_bPending; // True = the breakpoint has not been established yet, false = location found - MIuint m_nIgnore; // The number of time the breakpoint is run over before it is stopped on a hit - bool m_bCondition; // True = break point is conditional, use condition expression, false = no condition - CMIUtilString m_strCondition; // Break point condition expression - bool m_bBrkPtThreadId; // True = break point is specified to work with a specific thread, false = no specified thread given - MIuint m_nBrkPtThreadId; // Restrict the breakpoint to the specified thread-id - }; + MIuint m_id; // LLDB break point ID. + CMIUtilString m_strType; // Break point type. + bool m_bDisp; // True = "del", false = "keep". + bool m_bEnabled; // True = enabled, false = disabled break point. + lldb::addr_t m_pc; // Address number. + CMIUtilString m_fnName; // Function name. + CMIUtilString m_fileName; // File name text. + CMIUtilString m_path; // Full file name and path text. + MIuint m_nLine; // File line number. + bool m_bHaveArgOptionThreadGrp; // True = include MI field, false = do not + // include "thread-groups". + CMIUtilString m_strOptThrdGrp; // Thread group number. + MIuint m_nTimes; // The count of the breakpoint existence. + CMIUtilString m_strOrigLoc; // The name of the break point. + bool m_bPending; // True = the breakpoint has not been established yet, + // false = location found + MIuint m_nIgnore; // The number of time the breakpoint is run over before it + // is stopped on a hit + bool m_bCondition; // True = break point is conditional, use condition + // expression, false = no condition + CMIUtilString m_strCondition; // Break point condition expression + bool m_bBrkPtThreadId; // True = break point is specified to work with a + // specific thread, false = no specified thread given + MIuint + m_nBrkPtThreadId; // Restrict the breakpoint to the specified thread-id + }; - // Enumerations: - public: - //++ =================================================================== - // Details: The type of variable used by MIResponseFormVariableInfo family functions. - //-- - enum VariableType_e - { - eVariableType_InScope = (1u << 0), // In scope only. - eVariableType_Statics = (1u << 1), // Statics. - eVariableType_Locals = (1u << 2), // Locals. - eVariableType_Arguments = (1u << 3) // Arguments. - }; + // Enumerations: +public: + //++ =================================================================== + // Details: The type of variable used by MIResponseFormVariableInfo family + // functions. + //-- + enum VariableType_e { + eVariableType_InScope = (1u << 0), // In scope only. + eVariableType_Statics = (1u << 1), // Statics. + eVariableType_Locals = (1u << 2), // Locals. + eVariableType_Arguments = (1u << 3) // Arguments. + }; - //++ =================================================================== - // Details: Determine the information that should be shown by using MIResponseFormVariableInfo family functions. - //-- - enum VariableInfoFormat_e - { - eVariableInfoFormat_NoValues = 0, - eVariableInfoFormat_AllValues = 1, - eVariableInfoFormat_SimpleValues = 2 - }; + //++ =================================================================== + // Details: Determine the information that should be shown by using + // MIResponseFormVariableInfo family functions. + //-- + enum VariableInfoFormat_e { + eVariableInfoFormat_NoValues = 0, + eVariableInfoFormat_AllValues = 1, + eVariableInfoFormat_SimpleValues = 2 + }; - //++ =================================================================== - // Details: Determine the information that should be shown by using MIResponseFormThreadInfo family functions. - //-- - enum ThreadInfoFormat_e - { - eThreadInfoFormat_NoFrames, - eThreadInfoFormat_AllFrames - }; + //++ =================================================================== + // Details: Determine the information that should be shown by using + // MIResponseFormThreadInfo family functions. + //-- + enum ThreadInfoFormat_e { + eThreadInfoFormat_NoFrames, + eThreadInfoFormat_AllFrames + }; - //++ =================================================================== - // Details: Determine the information that should be shown by using MIResponseFormFrameInfo family functions. - //-- - enum FrameInfoFormat_e - { - eFrameInfoFormat_NoArguments, - eFrameInfoFormat_AllArguments, - eFrameInfoFormat_AllArgumentsInSimpleForm - }; + //++ =================================================================== + // Details: Determine the information that should be shown by using + // MIResponseFormFrameInfo family functions. + //-- + enum FrameInfoFormat_e { + eFrameInfoFormat_NoArguments, + eFrameInfoFormat_AllArguments, + eFrameInfoFormat_AllArgumentsInSimpleForm + }; - // Typedefs: - public: - typedef std::vector<uint32_t> VecActiveThreadId_t; + // Typedefs: +public: + typedef std::vector<uint32_t> VecActiveThreadId_t; - // Methods: - public: - bool Initialize() override; - bool Shutdown() override; + // Methods: +public: + bool Initialize() override; + bool Shutdown() override; - // Variant type data which can be assigned and retrieved across all command instances - template <typename T> bool SharedDataAdd(const CMIUtilString &vKey, const T &vData); - template <typename T> bool SharedDataRetrieve(const CMIUtilString &vKey, T &vwData); - void SharedDataDestroy(); + // Variant type data which can be assigned and retrieved across all command + // instances + template <typename T> + bool SharedDataAdd(const CMIUtilString &vKey, const T &vData); + template <typename T> + bool SharedDataRetrieve(const CMIUtilString &vKey, T &vwData); + void SharedDataDestroy(); - // Common command required functionality - bool AccessPath(const CMIUtilString &vPath, bool &vwbYesAccessible); - bool ResolvePath(const SMICmdData &vCmdData, const CMIUtilString &vPath, CMIUtilString &vwrResolvedPath); - bool ResolvePath(const CMIUtilString &vstrUnknown, CMIUtilString &vwrResolvedPath); - bool MIResponseFormFrameInfo(const lldb::SBThread &vrThread, const MIuint vnLevel, - const FrameInfoFormat_e veFrameInfoFormat, CMICmnMIValueTuple &vwrMiValueTuple); - bool MIResponseFormThreadInfo(const SMICmdData &vCmdData, const lldb::SBThread &vrThread, - const ThreadInfoFormat_e veThreadInfoFormat, CMICmnMIValueTuple &vwrMIValueTuple); - bool MIResponseFormVariableInfo(const lldb::SBFrame &vrFrame, const MIuint vMaskVarTypes, - const VariableInfoFormat_e veVarInfoFormat, CMICmnMIValueList &vwrMiValueList, - const MIuint vnMaxDepth = 10, const bool vbMarkArgs = false); - void MIResponseFormBrkPtFrameInfo(const SBrkPtInfo &vrBrkPtInfo, CMICmnMIValueTuple &vwrMiValueTuple); - bool MIResponseFormBrkPtInfo(const SBrkPtInfo &vrBrkPtInfo, CMICmnMIValueTuple &vwrMiValueTuple); - bool GetBrkPtInfo(const lldb::SBBreakpoint &vBrkPt, SBrkPtInfo &vrwBrkPtInfo) const; - bool RecordBrkPtInfo(const MIuint vnBrkPtId, const SBrkPtInfo &vrBrkPtInfo); - bool RecordBrkPtInfoGet(const MIuint vnBrkPtId, SBrkPtInfo &vrwBrkPtInfo) const; - bool RecordBrkPtInfoDelete(const MIuint vnBrkPtId); - CMIUtilThreadMutex& GetSessionMutex() { return m_sessionMutex;} - lldb::SBDebugger &GetDebugger() const; - lldb::SBListener &GetListener() const; - lldb::SBTarget GetTarget() const; - lldb::SBProcess GetProcess() const; + // Common command required functionality + bool AccessPath(const CMIUtilString &vPath, bool &vwbYesAccessible); + bool ResolvePath(const SMICmdData &vCmdData, const CMIUtilString &vPath, + CMIUtilString &vwrResolvedPath); + bool ResolvePath(const CMIUtilString &vstrUnknown, + CMIUtilString &vwrResolvedPath); + bool MIResponseFormFrameInfo(const lldb::SBThread &vrThread, + const MIuint vnLevel, + const FrameInfoFormat_e veFrameInfoFormat, + CMICmnMIValueTuple &vwrMiValueTuple); + bool MIResponseFormThreadInfo(const SMICmdData &vCmdData, + const lldb::SBThread &vrThread, + const ThreadInfoFormat_e veThreadInfoFormat, + CMICmnMIValueTuple &vwrMIValueTuple); + bool MIResponseFormVariableInfo(const lldb::SBFrame &vrFrame, + const MIuint vMaskVarTypes, + const VariableInfoFormat_e veVarInfoFormat, + CMICmnMIValueList &vwrMiValueList, + const MIuint vnMaxDepth = 10, + const bool vbMarkArgs = false); + void MIResponseFormBrkPtFrameInfo(const SBrkPtInfo &vrBrkPtInfo, + CMICmnMIValueTuple &vwrMiValueTuple); + bool MIResponseFormBrkPtInfo(const SBrkPtInfo &vrBrkPtInfo, + CMICmnMIValueTuple &vwrMiValueTuple); + bool GetBrkPtInfo(const lldb::SBBreakpoint &vBrkPt, + SBrkPtInfo &vrwBrkPtInfo) const; + bool RecordBrkPtInfo(const MIuint vnBrkPtId, const SBrkPtInfo &vrBrkPtInfo); + bool RecordBrkPtInfoGet(const MIuint vnBrkPtId, + SBrkPtInfo &vrwBrkPtInfo) const; + bool RecordBrkPtInfoDelete(const MIuint vnBrkPtId); + CMIUtilThreadMutex &GetSessionMutex() { return m_sessionMutex; } + lldb::SBDebugger &GetDebugger() const; + lldb::SBListener &GetListener() const; + lldb::SBTarget GetTarget() const; + lldb::SBProcess GetProcess() const; - // Attributes: - public: - // The following are available to all command instances - const MIuint m_nBrkPointCntMax; - VecActiveThreadId_t m_vecActiveThreadId; - lldb::tid_t m_currentSelectedThread; + // Attributes: +public: + // The following are available to all command instances + const MIuint m_nBrkPointCntMax; + VecActiveThreadId_t m_vecActiveThreadId; + lldb::tid_t m_currentSelectedThread; - // These are keys that can be used to access the shared data map - // Note: This list is expected to grow and will be moved and abstracted in the future. - const CMIUtilString m_constStrSharedDataKeyWkDir; - const CMIUtilString m_constStrSharedDataSolibPath; - const CMIUtilString m_constStrPrintCharArrayAsString; - const CMIUtilString m_constStrPrintExpandAggregates; - const CMIUtilString m_constStrPrintAggregateFieldNames; + // These are keys that can be used to access the shared data map + // Note: This list is expected to grow and will be moved and abstracted in the + // future. + const CMIUtilString m_constStrSharedDataKeyWkDir; + const CMIUtilString m_constStrSharedDataSolibPath; + const CMIUtilString m_constStrPrintCharArrayAsString; + const CMIUtilString m_constStrPrintExpandAggregates; + const CMIUtilString m_constStrPrintAggregateFieldNames; - // Typedefs: - private: - typedef std::vector<CMICmnLLDBDebugSessionInfoVarObj> VecVarObj_t; - typedef std::map<MIuint, SBrkPtInfo> MapBrkPtIdToBrkPtInfo_t; - typedef std::pair<MIuint, SBrkPtInfo> MapPairBrkPtIdToBrkPtInfo_t; + // Typedefs: +private: + typedef std::vector<CMICmnLLDBDebugSessionInfoVarObj> VecVarObj_t; + typedef std::map<MIuint, SBrkPtInfo> MapBrkPtIdToBrkPtInfo_t; + typedef std::pair<MIuint, SBrkPtInfo> MapPairBrkPtIdToBrkPtInfo_t; - // Methods: - private: - /* ctor */ CMICmnLLDBDebugSessionInfo(); - /* ctor */ CMICmnLLDBDebugSessionInfo(const CMICmnLLDBDebugSessionInfo &); - void operator=(const CMICmnLLDBDebugSessionInfo &); - // - bool GetVariableInfo(const lldb::SBValue &vrValue, const bool vbInSimpleForm, CMIUtilString &vwrStrValue); - bool GetFrameInfo(const lldb::SBFrame &vrFrame, lldb::addr_t &vwPc, CMIUtilString &vwFnName, CMIUtilString &vwFileName, - CMIUtilString &vwPath, MIuint &vwnLine); - bool GetThreadFrames(const SMICmdData &vCmdData, const MIuint vThreadIdx, const FrameInfoFormat_e veFrameInfoFormat, - CMIUtilString &vwrThreadFrames); - bool MIResponseForVariableInfoInternal(const VariableInfoFormat_e veVarInfoFormat, CMICmnMIValueList &vwrMiValueList, - const lldb::SBValueList &vwrSBValueList, const MIuint vnMaxDepth, const bool vbIsArgs, const bool vbMarkArgs); + // Methods: +private: + /* ctor */ CMICmnLLDBDebugSessionInfo(); + /* ctor */ CMICmnLLDBDebugSessionInfo(const CMICmnLLDBDebugSessionInfo &); + void operator=(const CMICmnLLDBDebugSessionInfo &); + // + bool GetVariableInfo(const lldb::SBValue &vrValue, const bool vbInSimpleForm, + CMIUtilString &vwrStrValue); + bool GetFrameInfo(const lldb::SBFrame &vrFrame, lldb::addr_t &vwPc, + CMIUtilString &vwFnName, CMIUtilString &vwFileName, + CMIUtilString &vwPath, MIuint &vwnLine); + bool GetThreadFrames(const SMICmdData &vCmdData, const MIuint vThreadIdx, + const FrameInfoFormat_e veFrameInfoFormat, + CMIUtilString &vwrThreadFrames); + bool + MIResponseForVariableInfoInternal(const VariableInfoFormat_e veVarInfoFormat, + CMICmnMIValueList &vwrMiValueList, + const lldb::SBValueList &vwrSBValueList, + const MIuint vnMaxDepth, + const bool vbIsArgs, const bool vbMarkArgs); - // Overridden: - private: - // From CMICmnBase - /* dtor */ ~CMICmnLLDBDebugSessionInfo() override; + // Overridden: +private: + // From CMICmnBase + /* dtor */ ~CMICmnLLDBDebugSessionInfo() override; - // Attributes: - private: - CMIUtilMapIdToVariant m_mapIdToSessionData; // Hold and retrieve key to value data available across all commands - VecVarObj_t m_vecVarObj; // Vector of session variable objects - MapBrkPtIdToBrkPtInfo_t m_mapBrkPtIdToBrkPtInfo; - CMIUtilThreadMutex m_sessionMutex; + // Attributes: +private: + CMIUtilMapIdToVariant m_mapIdToSessionData; // Hold and retrieve key to value + // data available across all + // commands + VecVarObj_t m_vecVarObj; // Vector of session variable objects + MapBrkPtIdToBrkPtInfo_t m_mapBrkPtIdToBrkPtInfo; + CMIUtilThreadMutex m_sessionMutex; }; -//++ ------------------------------------------------------------------------------------ -// Details: Command instances can create and share data between other instances of commands. -// This function adds new data to the shared data. Using the same ID more than +//++ +//------------------------------------------------------------------------------------ +// Details: Command instances can create and share data between other instances +// of commands. +// This function adds new data to the shared data. Using the same ID +// more than // once replaces any previous matching data keys. // Type: Template method. // Args: T - The type of the object to be stored. @@ -229,39 +258,38 @@ class CMICmnLLDBDebugSessionInfo : public CMICmnBase, public MI::ISingleton<CMIC // Throws: None. //-- template <typename T> -bool -CMICmnLLDBDebugSessionInfo::SharedDataAdd(const CMIUtilString &vKey, const T &vData) -{ - if (!m_mapIdToSessionData.Add<T>(vKey, vData)) - { - SetErrorDescription(m_mapIdToSessionData.GetErrorDescription()); - return MIstatus::failure; - } +bool CMICmnLLDBDebugSessionInfo::SharedDataAdd(const CMIUtilString &vKey, + const T &vData) { + if (!m_mapIdToSessionData.Add<T>(vKey, vData)) { + SetErrorDescription(m_mapIdToSessionData.GetErrorDescription()); + return MIstatus::failure; + } - return MIstatus::success; + return MIstatus::success; } -//++ ------------------------------------------------------------------------------------ -// Details: Command instances can create and share data between other instances of commands. +//++ +//------------------------------------------------------------------------------------ +// Details: Command instances can create and share data between other instances +// of commands. // This function retrieves data from the shared data container. // Type: Method. // Args: T - The type of the object being retrieved. // vKey - (R) A non empty unique data key to retrieve the data by. // vData - (W) The data. -// Return: bool - True = data found, false = data not found or an error occurred trying to fetch. +// Return: bool - True = data found, false = data not found or an error +// occurred trying to fetch. // Throws: None. //-- template <typename T> -bool -CMICmnLLDBDebugSessionInfo::SharedDataRetrieve(const CMIUtilString &vKey, T &vwData) -{ - bool bDataFound = false; +bool CMICmnLLDBDebugSessionInfo::SharedDataRetrieve(const CMIUtilString &vKey, + T &vwData) { + bool bDataFound = false; - if (!m_mapIdToSessionData.Get<T>(vKey, vwData, bDataFound)) - { - SetErrorDescription(m_mapIdToSessionData.GetErrorDescription()); - return MIstatus::failure; - } + if (!m_mapIdToSessionData.Get<T>(vKey, vwData, bDataFound)) { + SetErrorDescription(m_mapIdToSessionData.GetErrorDescription()); + return MIstatus::failure; + } - return bDataFound; + return bDataFound; } |