aboutsummaryrefslogtreecommitdiff
path: root/tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.cpp')
-rw-r--r--tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.cpp2731
1 files changed, 1386 insertions, 1345 deletions
diff --git a/tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.cpp b/tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.cpp
index 08218a2e87e4..b375611ec6ec 100644
--- a/tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.cpp
+++ b/tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.cpp
@@ -8,15 +8,15 @@
//===----------------------------------------------------------------------===//
//++
-// File: MICmnLLDBDebuggerHandleEvents.cpp
+// File: MICmnLLDBDebuggerHandleEvents.cpp
//
-// Overview: CMICmnLLDBDebuggerHandleEvents implementation.
+// Overview: CMICmnLLDBDebuggerHandleEvents implementation.
//
-// Environment: Compilers: Visual C++ 12.
-// gcc (Ubuntu/Linaro 4.8.1-10ubuntu9) 4.8.1
-// Libraries: See MIReadmetxt.
+// Environment: Compilers: Visual C++ 12.
+// gcc (Ubuntu/Linaro 4.8.1-10ubuntu9) 4.8.1
+// Libraries: See MIReadmetxt.
//
-// Copyright: None.
+// Copyright: None.
//--
// Third party headers:
@@ -28,10 +28,10 @@
#include <lldb/API/SBCommandInterpreter.h>
#include <lldb/API/SBCommandReturnObject.h>
#ifdef _WIN32
- #include <io.h> // For the ::_access()
+#include <io.h> // For the ::_access()
#else
- #include <unistd.h> // For the ::access()
-#endif // _WIN32
+#include <unistd.h> // For the ::access()
+#endif // _WIN32
#include <limits.h>
// In-house headers:
@@ -49,1518 +49,1559 @@
#include "MIDriver.h"
//++ ------------------------------------------------------------------------------------
-// Details: CMICmnLLDBDebuggerHandleEvents constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
+// Details: CMICmnLLDBDebuggerHandleEvents constructor.
+// Type: Method.
+// Args: None.
+// Return: None.
+// Throws: None.
//--
-CMICmnLLDBDebuggerHandleEvents::CMICmnLLDBDebuggerHandleEvents( void )
+CMICmnLLDBDebuggerHandleEvents::CMICmnLLDBDebuggerHandleEvents(void)
{
}
//++ ------------------------------------------------------------------------------------
-// Details: CMICmnLLDBDebuggerHandleEvents destructor.
-// Type: Overridable.
-// Args: None.
-// Return: None.
-// Throws: None.
+// Details: CMICmnLLDBDebuggerHandleEvents destructor.
+// Type: Overridable.
+// Args: None.
+// Return: None.
+// Throws: None.
//--
-CMICmnLLDBDebuggerHandleEvents::~CMICmnLLDBDebuggerHandleEvents( void )
+CMICmnLLDBDebuggerHandleEvents::~CMICmnLLDBDebuggerHandleEvents(void)
{
- Shutdown();
+ Shutdown();
}
//++ ------------------------------------------------------------------------------------
-// Details: Initialize resources for *this broardcaster object.
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
+// Details: Initialize resources for *this broardcaster object.
+// Type: Method.
+// Args: None.
+// Return: MIstatus::success - Functionality succeeded.
+// MIstatus::failure - Functionality failed.
+// Throws: None.
//--
-bool CMICmnLLDBDebuggerHandleEvents::Initialize( void )
+bool
+CMICmnLLDBDebuggerHandleEvents::Initialize(void)
{
- m_clientUsageRefCnt++;
+ m_clientUsageRefCnt++;
- if( m_bInitialized )
- return MIstatus::success;
+ if (m_bInitialized)
+ return MIstatus::success;
- m_bInitialized = MIstatus::success;
-
- return m_bInitialized;
+ m_bInitialized = MIstatus::success;
+
+ return m_bInitialized;
}
//++ ------------------------------------------------------------------------------------
-// Details: Release resources for *this broardcaster object.
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
+// Details: Release resources for *this broardcaster object.
+// Type: Method.
+// Args: None.
+// Return: MIstatus::success - Functionality succeeded.
+// MIstatus::failure - Functionality failed.
+// Throws: None.
//--
-bool CMICmnLLDBDebuggerHandleEvents::Shutdown( void )
+bool
+CMICmnLLDBDebuggerHandleEvents::Shutdown(void)
{
- if( --m_clientUsageRefCnt > 0 )
- return MIstatus::success;
-
- if( !m_bInitialized )
- return MIstatus::success;
+ if (--m_clientUsageRefCnt > 0)
+ return MIstatus::success;
+
+ if (!m_bInitialized)
+ return MIstatus::success;
- m_bInitialized = false;
+ m_bInitialized = false;
- return MIstatus::success;
-}
+ return MIstatus::success;
+}
//++ ------------------------------------------------------------------------------------
-// Details: Interpret the event object to asscertain the action to take or information to
-// to form and put in a MI Out-of-band record object which is given to stdout.
-// Type: Method.
-// Args: vEvent - (R) An LLDB broadcast event.
-// vrbHandledEvent - (W) True - event handled, false = not handled.
-// vrbExitAppEvent - (W) True - Received LLDB exit app event, false = did not.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
+// Details: Interpret the event object to asscertain the action to take or information to
+// to form and put in a MI Out-of-band record object which is given to stdout.
+// Type: Method.
+// Args: vEvent - (R) An LLDB broadcast event.
+// vrbHandledEvent - (W) True - event handled, false = not handled.
+// vrbExitAppEvent - (W) True - Received LLDB exit app event, false = did not.
+// Return: MIstatus::success - Functionality succeeded.
+// MIstatus::failure - Functionality failed.
+// Throws: None.
//--
-bool CMICmnLLDBDebuggerHandleEvents::HandleEvent( const lldb::SBEvent & vEvent, bool & vrbHandledEvent, bool & vrbExitAppEvent )
+bool
+CMICmnLLDBDebuggerHandleEvents::HandleEvent(const lldb::SBEvent &vEvent, bool &vrbHandledEvent, bool &vrbExitAppEvent)
{
- bool bOk = MIstatus::success;
- vrbHandledEvent = false;
- vrbExitAppEvent = false;
-
- if( lldb::SBProcess::EventIsProcessEvent( vEvent ) )
- {
- vrbHandledEvent = true;
- bOk = HandleEventSBProcess( vEvent, vrbExitAppEvent );
- }
- else if( lldb::SBBreakpoint::EventIsBreakpointEvent( vEvent ) )
- {
- vrbHandledEvent = true;
- bOk = HandleEventSBBreakPoint( vEvent );
- }
- else if( lldb::SBThread::EventIsThreadEvent( vEvent ) )
- {
- vrbHandledEvent = true;
- bOk = HandleEventSBThread( vEvent );
- }
-
- return bOk;
+ bool bOk = MIstatus::success;
+ vrbHandledEvent = false;
+ vrbExitAppEvent = false;
+
+ if (lldb::SBProcess::EventIsProcessEvent(vEvent))
+ {
+ vrbHandledEvent = true;
+ bOk = HandleEventSBProcess(vEvent, vrbExitAppEvent);
+ }
+ else if (lldb::SBBreakpoint::EventIsBreakpointEvent(vEvent))
+ {
+ vrbHandledEvent = true;
+ bOk = HandleEventSBBreakPoint(vEvent);
+ }
+ else if (lldb::SBThread::EventIsThreadEvent(vEvent))
+ {
+ vrbHandledEvent = true;
+ bOk = HandleEventSBThread(vEvent);
+ }
+
+ return bOk;
}
//++ ------------------------------------------------------------------------------------
-// Details: Handle a LLDB SBProcess event.
-// Type: Method.
-// Args: vEvent - (R) An LLDB broadcast event.
-// vrbExitAppEvent - (W) True - Received LLDB exit app event, false = did not.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
+// Details: Handle a LLDB SBProcess event.
+// Type: Method.
+// Args: vEvent - (R) An LLDB broadcast event.
+// vrbExitAppEvent - (W) True - Received LLDB exit app event, false = did not.
+// Return: MIstatus::success - Functionality succeeded.
+// MIstatus::failure - Functionality failed.
+// Throws: None.
//--
-bool CMICmnLLDBDebuggerHandleEvents::HandleEventSBProcess( const lldb::SBEvent & vEvent, bool & vrbExitAppEvent )
+bool
+CMICmnLLDBDebuggerHandleEvents::HandleEventSBProcess(const lldb::SBEvent &vEvent, bool &vrbExitAppEvent)
{
- bool bOk = MIstatus::success;
-
- const MIchar * pEventType = "";
- const MIuint nEventType = vEvent.GetType();
- switch( nEventType )
- {
- case lldb::SBProcess::eBroadcastBitInterrupt:
- pEventType = "eBroadcastBitInterrupt";
- break;
- case lldb::SBProcess::eBroadcastBitProfileData:
- pEventType = "eBroadcastBitProfileData";
- break;
- case lldb::SBProcess::eBroadcastBitStateChanged:
- pEventType = "eBroadcastBitStateChanged";
- bOk = HandleProcessEventBroadcastBitStateChanged( vEvent, vrbExitAppEvent );
- break;
- case lldb::SBProcess::eBroadcastBitSTDERR:
- pEventType = "eBroadcastBitSTDERR";
- bOk = GetProcessStderr();
- break;
- case lldb::SBProcess::eBroadcastBitSTDOUT:
- pEventType = "eBroadcastBitSTDOUT";
- bOk = GetProcessStdout();
- break;
- default:
- {
- const CMIUtilString msg( CMIUtilString::Format( MIRSRC( IDS_LLDBOUTOFBAND_ERR_UNKNOWN_EVENT ), "SBProcess", (MIuint) nEventType ) );
- SetErrorDescription( msg );
- return MIstatus::failure;
- }
- }
- m_pLog->WriteLog( CMIUtilString::Format( "##### An SB Process event occurred: %s", pEventType ) );
-
- return bOk;
+ bool bOk = MIstatus::success;
+
+ const MIchar *pEventType = "";
+ const MIuint nEventType = vEvent.GetType();
+ switch (nEventType)
+ {
+ case lldb::SBProcess::eBroadcastBitInterrupt:
+ pEventType = "eBroadcastBitInterrupt";
+ break;
+ case lldb::SBProcess::eBroadcastBitProfileData:
+ pEventType = "eBroadcastBitProfileData";
+ break;
+ case lldb::SBProcess::eBroadcastBitStateChanged:
+ pEventType = "eBroadcastBitStateChanged";
+ bOk = HandleProcessEventBroadcastBitStateChanged(vEvent, vrbExitAppEvent);
+ break;
+ case lldb::SBProcess::eBroadcastBitSTDERR:
+ pEventType = "eBroadcastBitSTDERR";
+ bOk = GetProcessStderr();
+ break;
+ case lldb::SBProcess::eBroadcastBitSTDOUT:
+ pEventType = "eBroadcastBitSTDOUT";
+ bOk = GetProcessStdout();
+ break;
+ default:
+ {
+ const CMIUtilString msg(CMIUtilString::Format(MIRSRC(IDS_LLDBOUTOFBAND_ERR_UNKNOWN_EVENT), "SBProcess", (MIuint)nEventType));
+ SetErrorDescription(msg);
+ return MIstatus::failure;
+ }
+ }
+ m_pLog->WriteLog(CMIUtilString::Format("##### An SB Process event occurred: %s", pEventType));
+
+ return bOk;
}
-
+
//++ ------------------------------------------------------------------------------------
-// Details: Handle a LLDB SBBreakpoint event.
-// Type: Method.
-// Args: vEvent - (R) An LLDB broadcast event.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
+// Details: Handle a LLDB SBBreakpoint event.
+// Type: Method.
+// Args: vEvent - (R) An LLDB broadcast event.
+// Return: MIstatus::success - Functionality succeeded.
+// MIstatus::failure - Functionality failed.
+// Throws: None.
//--
-bool CMICmnLLDBDebuggerHandleEvents::HandleEventSBBreakPoint( const lldb::SBEvent & vEvent )
+bool
+CMICmnLLDBDebuggerHandleEvents::HandleEventSBBreakPoint(const lldb::SBEvent &vEvent)
{
- bool bOk = MIstatus::success;
-
- const MIchar * pEventType ="";
- const lldb::BreakpointEventType eEvent = lldb::SBBreakpoint::GetBreakpointEventTypeFromEvent( vEvent );
- switch( eEvent )
- {
- case lldb::eBreakpointEventTypeThreadChanged:
- pEventType = "eBreakpointEventTypeThreadChanged";
- break;
- case lldb::eBreakpointEventTypeLocationsRemoved:
- pEventType = "eBreakpointEventTypeLocationsRemoved";
- break;
- case lldb::eBreakpointEventTypeInvalidType:
- pEventType = "eBreakpointEventTypeInvalidType";
- break;
- case lldb::eBreakpointEventTypeLocationsAdded:
- pEventType = "eBreakpointEventTypeLocationsAdded";
- bOk = HandleEventSBBreakpointLocationsAdded( vEvent );
- break;
- case lldb::eBreakpointEventTypeAdded:
- pEventType = "eBreakpointEventTypeAdded";
- bOk = HandleEventSBBreakpointAdded( vEvent );
- break;
- case lldb::eBreakpointEventTypeRemoved:
- pEventType = "eBreakpointEventTypeRemoved";
- bOk = HandleEventSBBreakpointCmn( vEvent );
- break;
- case lldb::eBreakpointEventTypeLocationsResolved:
- pEventType = "eBreakpointEventTypeLocationsResolved";
- break;
- case lldb::eBreakpointEventTypeEnabled:
- pEventType ="eBreakpointEventTypeEnabled";
- bOk = HandleEventSBBreakpointCmn( vEvent );
- break;
- case lldb::eBreakpointEventTypeDisabled:
- pEventType = "eBreakpointEventTypeDisabled";
- bOk = HandleEventSBBreakpointCmn( vEvent );
- break;
- case lldb::eBreakpointEventTypeCommandChanged:
- pEventType = "eBreakpointEventTypeCommandChanged";
- bOk = HandleEventSBBreakpointCmn( vEvent );
- break;
- case lldb::eBreakpointEventTypeConditionChanged:
- pEventType ="eBreakpointEventTypeConditionChanged";
- bOk = HandleEventSBBreakpointCmn( vEvent );
- break;
- case lldb::eBreakpointEventTypeIgnoreChanged:
- pEventType = "eBreakpointEventTypeIgnoreChanged";
- bOk = HandleEventSBBreakpointCmn( vEvent );
- break;
- default:
- {
- const CMIUtilString msg( CMIUtilString::Format( MIRSRC( IDS_LLDBOUTOFBAND_ERR_UNKNOWN_EVENT ), "SBBreakPoint", (MIuint) eEvent ) );
- SetErrorDescription( msg );
- return MIstatus::failure;
- }
- }
- m_pLog->WriteLog( CMIUtilString::Format( "##### An SB Breakpoint event occurred: %s", pEventType ) );
-
- return bOk;
+ bool bOk = MIstatus::success;
+
+ const MIchar *pEventType = "";
+ const lldb::BreakpointEventType eEvent = lldb::SBBreakpoint::GetBreakpointEventTypeFromEvent(vEvent);
+ switch (eEvent)
+ {
+ case lldb::eBreakpointEventTypeThreadChanged:
+ pEventType = "eBreakpointEventTypeThreadChanged";
+ break;
+ case lldb::eBreakpointEventTypeLocationsRemoved:
+ pEventType = "eBreakpointEventTypeLocationsRemoved";
+ break;
+ case lldb::eBreakpointEventTypeInvalidType:
+ pEventType = "eBreakpointEventTypeInvalidType";
+ break;
+ case lldb::eBreakpointEventTypeLocationsAdded:
+ pEventType = "eBreakpointEventTypeLocationsAdded";
+ bOk = HandleEventSBBreakpointLocationsAdded(vEvent);
+ break;
+ case lldb::eBreakpointEventTypeAdded:
+ pEventType = "eBreakpointEventTypeAdded";
+ bOk = HandleEventSBBreakpointAdded(vEvent);
+ break;
+ case lldb::eBreakpointEventTypeRemoved:
+ pEventType = "eBreakpointEventTypeRemoved";
+ bOk = HandleEventSBBreakpointCmn(vEvent);
+ break;
+ case lldb::eBreakpointEventTypeLocationsResolved:
+ pEventType = "eBreakpointEventTypeLocationsResolved";
+ break;
+ case lldb::eBreakpointEventTypeEnabled:
+ pEventType = "eBreakpointEventTypeEnabled";
+ bOk = HandleEventSBBreakpointCmn(vEvent);
+ break;
+ case lldb::eBreakpointEventTypeDisabled:
+ pEventType = "eBreakpointEventTypeDisabled";
+ bOk = HandleEventSBBreakpointCmn(vEvent);
+ break;
+ case lldb::eBreakpointEventTypeCommandChanged:
+ pEventType = "eBreakpointEventTypeCommandChanged";
+ bOk = HandleEventSBBreakpointCmn(vEvent);
+ break;
+ case lldb::eBreakpointEventTypeConditionChanged:
+ pEventType = "eBreakpointEventTypeConditionChanged";
+ bOk = HandleEventSBBreakpointCmn(vEvent);
+ break;
+ case lldb::eBreakpointEventTypeIgnoreChanged:
+ pEventType = "eBreakpointEventTypeIgnoreChanged";
+ bOk = HandleEventSBBreakpointCmn(vEvent);
+ break;
+ }
+ m_pLog->WriteLog(CMIUtilString::Format("##### An SB Breakpoint event occurred: %s", pEventType));
+
+ return bOk;
}
//++ ------------------------------------------------------------------------------------
-// Details: Handle a LLDB SBBreakpoint event.
-// Type: Method.
-// Args: vEvent - (R) An LLDB broadcast event.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
+// Details: Handle a LLDB SBBreakpoint event.
+// Type: Method.
+// Args: vEvent - (R) An LLDB broadcast event.
+// Return: MIstatus::success - Functionality succeeded.
+// MIstatus::failure - Functionality failed.
+// Throws: None.
//--
-bool CMICmnLLDBDebuggerHandleEvents::HandleEventSBBreakpointLocationsAdded( const lldb::SBEvent & vEvent )
+bool
+CMICmnLLDBDebuggerHandleEvents::HandleEventSBBreakpointLocationsAdded(const lldb::SBEvent &vEvent)
{
- const MIuint nLoc = lldb::SBBreakpoint::GetNumBreakpointLocationsFromEvent( vEvent );
- if( nLoc == 0 )
- return MIstatus::success;
-
- lldb::SBBreakpoint brkPt = lldb::SBBreakpoint::GetBreakpointFromEvent( vEvent );
- const CMIUtilString plural( (nLoc == 1) ? "" : "s" );
- const CMIUtilString msg( CMIUtilString::Format( "%d location%s added to breakpoint %d", nLoc, plural.c_str(), brkPt.GetID() ) );
-
- return TextToStdout( msg );
+ const MIuint nLoc = lldb::SBBreakpoint::GetNumBreakpointLocationsFromEvent(vEvent);
+ if (nLoc == 0)
+ return MIstatus::success;
+
+ lldb::SBBreakpoint brkPt = lldb::SBBreakpoint::GetBreakpointFromEvent(vEvent);
+ const CMIUtilString plural((nLoc == 1) ? "" : "s");
+ const CMIUtilString msg(CMIUtilString::Format("%d location%s added to breakpoint %d", nLoc, plural.c_str(), brkPt.GetID()));
+
+ return TextToStdout(msg);
}
-
+
//++ ------------------------------------------------------------------------------------
-// Details: Handle a LLDB SBBreakpoint event.
-// Type: Method.
-// Args: vEvent - (R) An LLDB broadcast event.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
+// Details: Handle a LLDB SBBreakpoint event.
+// Type: Method.
+// Args: vEvent - (R) An LLDB broadcast event.
+// Return: MIstatus::success - Functionality succeeded.
+// MIstatus::failure - Functionality failed.
+// Throws: None.
//--
-bool CMICmnLLDBDebuggerHandleEvents::HandleEventSBBreakpointCmn( const lldb::SBEvent & vEvent )
+bool
+CMICmnLLDBDebuggerHandleEvents::HandleEventSBBreakpointCmn(const lldb::SBEvent &vEvent)
{
- lldb::SBBreakpoint brkPt = lldb::SBBreakpoint::GetBreakpointFromEvent( vEvent );
- if( !brkPt.IsValid() )
- return MIstatus::success;
-
- CMICmnLLDBDebugSessionInfo & rSessionInfo( CMICmnLLDBDebugSessionInfo::Instance() );
- CMICmnLLDBDebugSessionInfo::SBrkPtInfo sBrkPtInfo;
- if( !rSessionInfo.GetBrkPtInfo( brkPt, sBrkPtInfo ) )
- {
- SetErrorDescription( CMIUtilString::Format( MIRSRC( IDS_LLDBOUTOFBAND_ERR_BRKPT_INFO_GET ), "HandleEventSBBreakpointCmn()", brkPt.GetID() ) );
- return MIstatus::failure;
- }
-
- // CODETAG_LLDB_BREAKPOINT_CREATION
- // This is in a worker thread
- // Add more breakpoint information or overwrite existing information
- CMICmnLLDBDebugSessionInfo::SBrkPtInfo sBrkPtInfoRec;
- if( !rSessionInfo.RecordBrkPtInfoGet( brkPt.GetID(), sBrkPtInfoRec ) )
- {
- SetErrorDescription( CMIUtilString::Format( MIRSRC( IDS_LLDBOUTOFBAND_ERR_BRKPT_NOTFOUND ), "HandleEventSBBreakpointCmn()", brkPt.GetID() ) );
- return MIstatus::failure;
- }
- sBrkPtInfo.m_bDisp = sBrkPtInfoRec.m_bDisp;
- sBrkPtInfo.m_bEnabled = brkPt.IsEnabled();
- sBrkPtInfo.m_bHaveArgOptionThreadGrp = false;
- sBrkPtInfo.m_strOptThrdGrp = "";
- sBrkPtInfo.m_nTimes = brkPt.GetHitCount();
- sBrkPtInfo.m_strOrigLoc = sBrkPtInfoRec.m_strOrigLoc;
- sBrkPtInfo.m_nIgnore = sBrkPtInfoRec.m_nIgnore;
- sBrkPtInfo.m_bPending = sBrkPtInfoRec.m_bPending;
- sBrkPtInfo.m_bCondition = sBrkPtInfoRec.m_bCondition;
- sBrkPtInfo.m_strCondition = sBrkPtInfoRec.m_strCondition;
- sBrkPtInfo.m_bBrkPtThreadId = sBrkPtInfoRec.m_bBrkPtThreadId;
- sBrkPtInfo.m_nBrkPtThreadId = sBrkPtInfoRec.m_nBrkPtThreadId;
-
- // MI print "=breakpoint-modified,bkpt={number=\"%d\",type=\"breakpoint\",disp=\"%s\",enabled=\"%c\",addr=\"0x%08x\", func=\"%s\",file=\"%s\",fullname=\"%s/%s\",line=\"%d\",times=\"%d\",original-location=\"%s\"}"
- CMICmnMIValueTuple miValueTuple;
- if( !rSessionInfo.MIResponseFormBrkPtInfo( sBrkPtInfo, miValueTuple ) )
- {
- SetErrorDescription( CMIUtilString::Format( MIRSRC( IDS_LLDBOUTOFBAND_ERR_FORM_MI_RESPONSE ), "HandleEventSBBreakpointCmn()" ) );
- return MIstatus::failure;
- }
-
- const CMICmnMIValueResult miValueResultC( "bkpt", miValueTuple );
- const CMICmnMIOutOfBandRecord miOutOfBandRecord( CMICmnMIOutOfBandRecord::eOutOfBand_BreakPointModified, miValueResultC );
- const bool bOk = MiOutOfBandRecordToStdout( miOutOfBandRecord );
-
- return bOk;
+ lldb::SBBreakpoint brkPt = lldb::SBBreakpoint::GetBreakpointFromEvent(vEvent);
+ if (!brkPt.IsValid())
+ return MIstatus::success;
+
+ CMICmnLLDBDebugSessionInfo &rSessionInfo(CMICmnLLDBDebugSessionInfo::Instance());
+ CMICmnLLDBDebugSessionInfo::SBrkPtInfo sBrkPtInfo;
+ if (!rSessionInfo.GetBrkPtInfo(brkPt, sBrkPtInfo))
+ {
+ SetErrorDescription(
+ CMIUtilString::Format(MIRSRC(IDS_LLDBOUTOFBAND_ERR_BRKPT_INFO_GET), "HandleEventSBBreakpointCmn()", brkPt.GetID()));
+ return MIstatus::failure;
+ }
+
+ // CODETAG_LLDB_BREAKPOINT_CREATION
+ // This is in a worker thread
+ // Add more breakpoint information or overwrite existing information
+ CMICmnLLDBDebugSessionInfo::SBrkPtInfo sBrkPtInfoRec;
+ if (!rSessionInfo.RecordBrkPtInfoGet(brkPt.GetID(), sBrkPtInfoRec))
+ {
+ SetErrorDescription(
+ CMIUtilString::Format(MIRSRC(IDS_LLDBOUTOFBAND_ERR_BRKPT_NOTFOUND), "HandleEventSBBreakpointCmn()", brkPt.GetID()));
+ return MIstatus::failure;
+ }
+ sBrkPtInfo.m_bDisp = sBrkPtInfoRec.m_bDisp;
+ sBrkPtInfo.m_bEnabled = brkPt.IsEnabled();
+ sBrkPtInfo.m_bHaveArgOptionThreadGrp = false;
+ sBrkPtInfo.m_strOptThrdGrp = "";
+ sBrkPtInfo.m_nTimes = brkPt.GetHitCount();
+ sBrkPtInfo.m_strOrigLoc = sBrkPtInfoRec.m_strOrigLoc;
+ sBrkPtInfo.m_nIgnore = sBrkPtInfoRec.m_nIgnore;
+ sBrkPtInfo.m_bPending = sBrkPtInfoRec.m_bPending;
+ sBrkPtInfo.m_bCondition = sBrkPtInfoRec.m_bCondition;
+ sBrkPtInfo.m_strCondition = sBrkPtInfoRec.m_strCondition;
+ sBrkPtInfo.m_bBrkPtThreadId = sBrkPtInfoRec.m_bBrkPtThreadId;
+ sBrkPtInfo.m_nBrkPtThreadId = sBrkPtInfoRec.m_nBrkPtThreadId;
+
+ // MI print "=breakpoint-modified,bkpt={number=\"%d\",type=\"breakpoint\",disp=\"%s\",enabled=\"%c\",addr=\"0x%08x\",
+ // func=\"%s\",file=\"%s\",fullname=\"%s/%s\",line=\"%d\",times=\"%d\",original-location=\"%s\"}"
+ CMICmnMIValueTuple miValueTuple;
+ if (!rSessionInfo.MIResponseFormBrkPtInfo(sBrkPtInfo, miValueTuple))
+ {
+ SetErrorDescription(CMIUtilString::Format(MIRSRC(IDS_LLDBOUTOFBAND_ERR_FORM_MI_RESPONSE), "HandleEventSBBreakpointCmn()"));
+ return MIstatus::failure;
+ }
+
+ const CMICmnMIValueResult miValueResultC("bkpt", miValueTuple);
+ const CMICmnMIOutOfBandRecord miOutOfBandRecord(CMICmnMIOutOfBandRecord::eOutOfBand_BreakPointModified, miValueResultC);
+ const bool bOk = MiOutOfBandRecordToStdout(miOutOfBandRecord);
+
+ return bOk;
}
//++ ------------------------------------------------------------------------------------
-// Details: Handle a LLDB SBBreakpoint added event.
-// Add more breakpoint information or overwrite existing information.
-// Normally a break point session info objects exists by now when an MI command
-// was issued to insert a break so the retrieval would normally always succeed
-// however should a user type "b main" into a console then LLDB will create a
-// breakpoint directly, hence no MI command, hence no previous record of the
-// breakpoint so RecordBrkPtInfoGet() will fail. We still get the event though
-// so need to create a breakpoint info object here and send appropriate MI
-// response.
-// Type: Method.
-// Args: vEvent - (R) An LLDB broadcast event.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
+// Details: Handle a LLDB SBBreakpoint added event.
+// Add more breakpoint information or overwrite existing information.
+// Normally a break point session info objects exists by now when an MI command
+// was issued to insert a break so the retrieval would normally always succeed
+// however should a user type "b main" into a console then LLDB will create a
+// breakpoint directly, hence no MI command, hence no previous record of the
+// breakpoint so RecordBrkPtInfoGet() will fail. We still get the event though
+// so need to create a breakpoint info object here and send appropriate MI
+// response.
+// Type: Method.
+// Args: vEvent - (R) An LLDB broadcast event.
+// Return: MIstatus::success - Functionality succeeded.
+// MIstatus::failure - Functionality failed.
+// Throws: None.
//--
-bool CMICmnLLDBDebuggerHandleEvents::HandleEventSBBreakpointAdded( const lldb::SBEvent & vEvent )
+bool
+CMICmnLLDBDebuggerHandleEvents::HandleEventSBBreakpointAdded(const lldb::SBEvent &vEvent)
{
- lldb::SBBreakpoint brkPt = lldb::SBBreakpoint::GetBreakpointFromEvent( vEvent );
- if( !brkPt.IsValid() )
- return MIstatus::success;
-
- CMICmnLLDBDebugSessionInfo & rSessionInfo( CMICmnLLDBDebugSessionInfo::Instance() );
- CMICmnLLDBDebugSessionInfo::SBrkPtInfo sBrkPtInfo;
- if( !rSessionInfo.GetBrkPtInfo( brkPt, sBrkPtInfo ) )
- {
- SetErrorDescription( CMIUtilString::Format( MIRSRC( IDS_LLDBOUTOFBAND_ERR_BRKPT_INFO_GET ), "HandleEventSBBreakpointAdded()", brkPt.GetID() ) );
- return MIstatus::failure;
- }
-
- // CODETAG_LLDB_BREAKPOINT_CREATION
- // This is in a worker thread
- CMICmnLLDBDebugSessionInfo::SBrkPtInfo sBrkPtInfoRec;
- const bool bBrkPtExistAlready = rSessionInfo.RecordBrkPtInfoGet( brkPt.GetID(), sBrkPtInfoRec );
- if( bBrkPtExistAlready )
- {
- // Update breakpoint information object
- sBrkPtInfo.m_bDisp = sBrkPtInfoRec.m_bDisp;
- sBrkPtInfo.m_bEnabled = brkPt.IsEnabled();
- sBrkPtInfo.m_bHaveArgOptionThreadGrp = false;
- sBrkPtInfo.m_strOptThrdGrp.clear();
- sBrkPtInfo.m_nTimes = brkPt.GetHitCount();
- sBrkPtInfo.m_strOrigLoc = sBrkPtInfoRec.m_strOrigLoc;
- sBrkPtInfo.m_nIgnore = sBrkPtInfoRec.m_nIgnore;
- sBrkPtInfo.m_bPending = sBrkPtInfoRec.m_bPending;
- sBrkPtInfo.m_bCondition = sBrkPtInfoRec.m_bCondition;
- sBrkPtInfo.m_strCondition = sBrkPtInfoRec.m_strCondition;
- sBrkPtInfo.m_bBrkPtThreadId = sBrkPtInfoRec.m_bBrkPtThreadId;
- sBrkPtInfo.m_nBrkPtThreadId = sBrkPtInfoRec.m_nBrkPtThreadId;
- }
- else
- {
- // Create a breakpoint information object
- sBrkPtInfo.m_bDisp = brkPt.IsOneShot();
- sBrkPtInfo.m_bEnabled = brkPt.IsEnabled();
- sBrkPtInfo.m_bHaveArgOptionThreadGrp = false;
- sBrkPtInfo.m_strOptThrdGrp.clear();
- sBrkPtInfo.m_strOrigLoc = CMIUtilString::Format( "%s:%d", sBrkPtInfo.m_fileName.c_str(), sBrkPtInfo.m_nLine );
- sBrkPtInfo.m_nIgnore = brkPt.GetIgnoreCount();
- sBrkPtInfo.m_bPending = false;
- const MIchar * pStrCondition = brkPt.GetCondition();
- sBrkPtInfo.m_bCondition = (pStrCondition != nullptr) ? true : false;
- sBrkPtInfo.m_strCondition = (pStrCondition != nullptr) ? pStrCondition : "??";
- sBrkPtInfo.m_bBrkPtThreadId = (brkPt.GetThreadID() != 0) ? true : false;
- sBrkPtInfo.m_nBrkPtThreadId = brkPt.GetThreadID();
- }
-
- CMICmnMIValueTuple miValueTuple;
- if( !rSessionInfo.MIResponseFormBrkPtInfo( sBrkPtInfo, miValueTuple ) )
- {
- SetErrorDescription( CMIUtilString::Format( MIRSRC( IDS_LLDBOUTOFBAND_ERR_FORM_MI_RESPONSE ), "HandleEventSBBreakpointAdded()" ) );
- return MIstatus::failure;
- }
-
- bool bOk = MIstatus::success;
- if( bBrkPtExistAlready )
- {
- // MI print "=breakpoint-modified,bkpt={number=\"%d\",type=\"breakpoint\",disp=\"%s\",enabled=\"%c\",addr=\"0x%08x\",func=\"%s\",file=\"%s\",fullname=\"%s/%s\",line=\"%d\",times=\"%d\",original-location=\"%s\"}"
- const CMICmnMIValueResult miValueResult( "bkpt", miValueTuple );
- const CMICmnMIOutOfBandRecord miOutOfBandRecord( CMICmnMIOutOfBandRecord::eOutOfBand_BreakPointModified, miValueResult );
- bOk = MiOutOfBandRecordToStdout( miOutOfBandRecord );
- }
- else
- {
- // CODETAG_LLDB_BRKPT_ID_MAX
- if( brkPt.GetID() > (lldb::break_id_t) rSessionInfo.m_nBrkPointCntMax )
- {
- SetErrorDescription( CMIUtilString::Format( MIRSRC( IDS_CMD_ERR_BRKPT_CNT_EXCEEDED ), "HandleEventSBBreakpointAdded()", rSessionInfo.m_nBrkPointCntMax, sBrkPtInfo.m_id ) );
- return MIstatus::failure;
- }
- if( !rSessionInfo.RecordBrkPtInfo( brkPt.GetID(), sBrkPtInfo ) )
- {
- SetErrorDescription( CMIUtilString::Format( MIRSRC( IDS_LLDBOUTOFBAND_ERR_BRKPT_INFO_SET ), "HandleEventSBBreakpointAdded()", sBrkPtInfo.m_id ) );
- return MIstatus::failure;
- }
-
- // MI print "=breakpoint-created,bkpt={number=\"%d\",type=\"breakpoint\",disp=\"%s\",enabled=\"%c\",addr=\"0x%08x\",func=\"%s\",file=\"%s\",fullname=\"%s/%s\",line=\"%d\",times=\"%d\",original-location=\"%s\"}"
- const CMICmnMIValueResult miValueResult( "bkpt", miValueTuple );
- const CMICmnMIOutOfBandRecord miOutOfBandRecord( CMICmnMIOutOfBandRecord::eOutOfBand_BreakPointCreated, miValueResult );
- bOk = MiOutOfBandRecordToStdout( miOutOfBandRecord );
- }
-
- return bOk;
+ lldb::SBBreakpoint brkPt = lldb::SBBreakpoint::GetBreakpointFromEvent(vEvent);
+ if (!brkPt.IsValid())
+ return MIstatus::success;
+
+ CMICmnLLDBDebugSessionInfo &rSessionInfo(CMICmnLLDBDebugSessionInfo::Instance());
+ CMICmnLLDBDebugSessionInfo::SBrkPtInfo sBrkPtInfo;
+ if (!rSessionInfo.GetBrkPtInfo(brkPt, sBrkPtInfo))
+ {
+ SetErrorDescription(
+ CMIUtilString::Format(MIRSRC(IDS_LLDBOUTOFBAND_ERR_BRKPT_INFO_GET), "HandleEventSBBreakpointAdded()", brkPt.GetID()));
+ return MIstatus::failure;
+ }
+
+ // CODETAG_LLDB_BREAKPOINT_CREATION
+ // This is in a worker thread
+ CMICmnLLDBDebugSessionInfo::SBrkPtInfo sBrkPtInfoRec;
+ const bool bBrkPtExistAlready = rSessionInfo.RecordBrkPtInfoGet(brkPt.GetID(), sBrkPtInfoRec);
+ if (bBrkPtExistAlready)
+ {
+ // Update breakpoint information object
+ sBrkPtInfo.m_bDisp = sBrkPtInfoRec.m_bDisp;
+ sBrkPtInfo.m_bEnabled = brkPt.IsEnabled();
+ sBrkPtInfo.m_bHaveArgOptionThreadGrp = false;
+ sBrkPtInfo.m_strOptThrdGrp.clear();
+ sBrkPtInfo.m_nTimes = brkPt.GetHitCount();
+ sBrkPtInfo.m_strOrigLoc = sBrkPtInfoRec.m_strOrigLoc;
+ sBrkPtInfo.m_nIgnore = sBrkPtInfoRec.m_nIgnore;
+ sBrkPtInfo.m_bPending = sBrkPtInfoRec.m_bPending;
+ sBrkPtInfo.m_bCondition = sBrkPtInfoRec.m_bCondition;
+ sBrkPtInfo.m_strCondition = sBrkPtInfoRec.m_strCondition;
+ sBrkPtInfo.m_bBrkPtThreadId = sBrkPtInfoRec.m_bBrkPtThreadId;
+ sBrkPtInfo.m_nBrkPtThreadId = sBrkPtInfoRec.m_nBrkPtThreadId;
+ }
+ else
+ {
+ // Create a breakpoint information object
+ sBrkPtInfo.m_bDisp = brkPt.IsOneShot();
+ sBrkPtInfo.m_bEnabled = brkPt.IsEnabled();
+ sBrkPtInfo.m_bHaveArgOptionThreadGrp = false;
+ sBrkPtInfo.m_strOptThrdGrp.clear();
+ sBrkPtInfo.m_strOrigLoc = CMIUtilString::Format("%s:%d", sBrkPtInfo.m_fileName.c_str(), sBrkPtInfo.m_nLine);
+ sBrkPtInfo.m_nIgnore = brkPt.GetIgnoreCount();
+ sBrkPtInfo.m_bPending = false;
+ const MIchar *pStrCondition = brkPt.GetCondition();
+ sBrkPtInfo.m_bCondition = (pStrCondition != nullptr) ? true : false;
+ sBrkPtInfo.m_strCondition = (pStrCondition != nullptr) ? pStrCondition : "??";
+ sBrkPtInfo.m_bBrkPtThreadId = (brkPt.GetThreadID() != 0) ? true : false;
+ sBrkPtInfo.m_nBrkPtThreadId = brkPt.GetThreadID();
+ }
+
+ CMICmnMIValueTuple miValueTuple;
+ if (!rSessionInfo.MIResponseFormBrkPtInfo(sBrkPtInfo, miValueTuple))
+ {
+ SetErrorDescription(CMIUtilString::Format(MIRSRC(IDS_LLDBOUTOFBAND_ERR_FORM_MI_RESPONSE), "HandleEventSBBreakpointAdded()"));
+ return MIstatus::failure;
+ }
+
+ bool bOk = MIstatus::success;
+ if (bBrkPtExistAlready)
+ {
+ // MI print
+ // "=breakpoint-modified,bkpt={number=\"%d\",type=\"breakpoint\",disp=\"%s\",enabled=\"%c\",addr=\"0x%08x\",func=\"%s\",file=\"%s\",fullname=\"%s/%s\",line=\"%d\",times=\"%d\",original-location=\"%s\"}"
+ const CMICmnMIValueResult miValueResult("bkpt", miValueTuple);
+ const CMICmnMIOutOfBandRecord miOutOfBandRecord(CMICmnMIOutOfBandRecord::eOutOfBand_BreakPointModified, miValueResult);
+ bOk = MiOutOfBandRecordToStdout(miOutOfBandRecord);
+ }
+ else
+ {
+ // CODETAG_LLDB_BRKPT_ID_MAX
+ if (brkPt.GetID() > (lldb::break_id_t)rSessionInfo.m_nBrkPointCntMax)
+ {
+ SetErrorDescription(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_BRKPT_CNT_EXCEEDED), "HandleEventSBBreakpointAdded()",
+ rSessionInfo.m_nBrkPointCntMax, sBrkPtInfo.m_id));
+ return MIstatus::failure;
+ }
+ if (!rSessionInfo.RecordBrkPtInfo(brkPt.GetID(), sBrkPtInfo))
+ {
+ SetErrorDescription(
+ CMIUtilString::Format(MIRSRC(IDS_LLDBOUTOFBAND_ERR_BRKPT_INFO_SET), "HandleEventSBBreakpointAdded()", sBrkPtInfo.m_id));
+ return MIstatus::failure;
+ }
+
+ // MI print
+ // "=breakpoint-created,bkpt={number=\"%d\",type=\"breakpoint\",disp=\"%s\",enabled=\"%c\",addr=\"0x%08x\",func=\"%s\",file=\"%s\",fullname=\"%s/%s\",line=\"%d\",times=\"%d\",original-location=\"%s\"}"
+ const CMICmnMIValueResult miValueResult("bkpt", miValueTuple);
+ const CMICmnMIOutOfBandRecord miOutOfBandRecord(CMICmnMIOutOfBandRecord::eOutOfBand_BreakPointCreated, miValueResult);
+ bOk = MiOutOfBandRecordToStdout(miOutOfBandRecord);
+ }
+
+ return bOk;
}
//++ ------------------------------------------------------------------------------------
-// Details: Handle a LLDB SBThread event.
-// Type: Method.
-// Args: vEvent - (R) An LLDB broadcast event.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
+// Details: Handle a LLDB SBThread event.
+// Type: Method.
+// Args: vEvent - (R) An LLDB broadcast event.
+// Return: MIstatus::success - Functionality succeeded.
+// MIstatus::failure - Functionality failed.
+// Throws: None.
//--
-bool CMICmnLLDBDebuggerHandleEvents::HandleEventSBThread( const lldb::SBEvent & vEvent )
+bool
+CMICmnLLDBDebuggerHandleEvents::HandleEventSBThread(const lldb::SBEvent &vEvent)
{
- if( !ChkForStateChanges() )
- return MIstatus::failure;
+ if (!ChkForStateChanges())
+ return MIstatus::failure;
- bool bOk = MIstatus::success;
- const MIchar * pEventType = "";
+ bool bOk = MIstatus::success;
+ const MIchar *pEventType = "";
const MIuint nEventType = vEvent.GetType();
- switch( nEventType )
- {
- case lldb::SBThread::eBroadcastBitStackChanged:
- pEventType = "eBroadcastBitStackChanged";
- bOk = HandleEventSBThreadBitStackChanged( vEvent );
- break;
- case lldb::SBThread::eBroadcastBitThreadSuspended:
- pEventType = "eBroadcastBitThreadSuspended";
- bOk = HandleEventSBThreadSuspended( vEvent );
- break;
- case lldb::SBThread::eBroadcastBitThreadResumed:
- pEventType = "eBroadcastBitThreadResumed";
- break;
- case lldb::SBThread::eBroadcastBitSelectedFrameChanged:
- pEventType = "eBroadcastBitSelectedFrameChanged";
- break;
- case lldb::SBThread::eBroadcastBitThreadSelected:
- pEventType = "eBroadcastBitThreadSelected";
- break;
- default:
- {
- const CMIUtilString msg( CMIUtilString::Format( MIRSRC( IDS_LLDBOUTOFBAND_ERR_UNKNOWN_EVENT ), "SBThread", (MIuint) nEventType ) );
- SetErrorDescription( msg );
- return MIstatus::failure;
- }
- }
- m_pLog->WriteLog( CMIUtilString::Format( "##### An SBThread event occurred: %s", pEventType ) );
-
- return bOk;
+ switch (nEventType)
+ {
+ case lldb::SBThread::eBroadcastBitStackChanged:
+ pEventType = "eBroadcastBitStackChanged";
+ bOk = HandleEventSBThreadBitStackChanged(vEvent);
+ break;
+ case lldb::SBThread::eBroadcastBitThreadSuspended:
+ pEventType = "eBroadcastBitThreadSuspended";
+ bOk = HandleEventSBThreadSuspended(vEvent);
+ break;
+ case lldb::SBThread::eBroadcastBitThreadResumed:
+ pEventType = "eBroadcastBitThreadResumed";
+ break;
+ case lldb::SBThread::eBroadcastBitSelectedFrameChanged:
+ pEventType = "eBroadcastBitSelectedFrameChanged";
+ break;
+ case lldb::SBThread::eBroadcastBitThreadSelected:
+ pEventType = "eBroadcastBitThreadSelected";
+ break;
+ default:
+ {
+ const CMIUtilString msg(CMIUtilString::Format(MIRSRC(IDS_LLDBOUTOFBAND_ERR_UNKNOWN_EVENT), "SBThread", (MIuint)nEventType));
+ SetErrorDescription(msg);
+ return MIstatus::failure;
+ }
+ }
+ m_pLog->WriteLog(CMIUtilString::Format("##### An SBThread event occurred: %s", pEventType));
+
+ return bOk;
}
//++ ------------------------------------------------------------------------------------
-// Details: Handle a LLDB SBThread event.
-// Type: Method.
-// Args: vEvent - (R) An LLDB broadcast event.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
+// Details: Handle a LLDB SBThread event.
+// Type: Method.
+// Args: vEvent - (R) An LLDB broadcast event.
+// Return: MIstatus::success - Functionality succeeded.
+// MIstatus::failure - Functionality failed.
+// Throws: None.
//--
-bool CMICmnLLDBDebuggerHandleEvents::HandleEventSBThreadSuspended( const lldb::SBEvent & vEvent )
+bool
+CMICmnLLDBDebuggerHandleEvents::HandleEventSBThreadSuspended(const lldb::SBEvent &vEvent)
{
- lldb::SBThread thread = lldb::SBThread::GetThreadFromEvent( vEvent );
- if( !thread.IsValid() )
- return MIstatus::success;
-
- const lldb::StopReason eStopReason = thread.GetStopReason();
- if( eStopReason != lldb::eStopReasonSignal )
- return MIstatus::success;
-
- // MI print "@thread=%d,signal=%lld"
- const MIuint64 nId = thread.GetStopReasonDataAtIndex( 0 );
- const CMIUtilString strThread( CMIUtilString::Format( "%d", thread.GetThreadID() ) );
- const CMICmnMIValueConst miValueConst( strThread );
- const CMICmnMIValueResult miValueResult( "thread", miValueConst );
- CMICmnMIOutOfBandRecord miOutOfBandRecord( CMICmnMIOutOfBandRecord::eOutOfBand_Thread, miValueResult );
- const CMIUtilString strSignal( CMIUtilString::Format( "%lld", nId ) );
- const CMICmnMIValueConst miValueConst2( strSignal );
- const CMICmnMIValueResult miValueResult2( "signal", miValueConst2 );
- bool bOk = miOutOfBandRecord.Add( miValueResult2 );
- bOk = bOk && MiOutOfBandRecordToStdout( miOutOfBandRecord );
-
- return bOk;
+ lldb::SBThread thread = lldb::SBThread::GetThreadFromEvent(vEvent);
+ if (!thread.IsValid())
+ return MIstatus::success;
+
+ const lldb::StopReason eStopReason = thread.GetStopReason();
+ if (eStopReason != lldb::eStopReasonSignal)
+ return MIstatus::success;
+
+ // MI print "@thread=%d,signal=%lld"
+ const MIuint64 nId = thread.GetStopReasonDataAtIndex(0);
+ const CMIUtilString strThread(CMIUtilString::Format("%d", thread.GetThreadID()));
+ const CMICmnMIValueConst miValueConst(strThread);
+ const CMICmnMIValueResult miValueResult("thread", miValueConst);
+ CMICmnMIOutOfBandRecord miOutOfBandRecord(CMICmnMIOutOfBandRecord::eOutOfBand_Thread, miValueResult);
+ const CMIUtilString strSignal(CMIUtilString::Format("%lld", nId));
+ const CMICmnMIValueConst miValueConst2(strSignal);
+ const CMICmnMIValueResult miValueResult2("signal", miValueConst2);
+ bool bOk = miOutOfBandRecord.Add(miValueResult2);
+ bOk = bOk && MiOutOfBandRecordToStdout(miOutOfBandRecord);
+
+ return bOk;
}
//++ ------------------------------------------------------------------------------------
-// Details: Handle a LLDB SBThread event.
-// Type: Method.
-// Args: vEvent - (R) An LLDB broadcast event.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
+// Details: Handle a LLDB SBThread event.
+// Type: Method.
+// Args: vEvent - (R) An LLDB broadcast event.
+// Return: MIstatus::success - Functionality succeeded.
+// MIstatus::failure - Functionality failed.
+// Throws: None.
//--
-bool CMICmnLLDBDebuggerHandleEvents::HandleEventSBThreadBitStackChanged( const lldb::SBEvent & vEvent )
+bool
+CMICmnLLDBDebuggerHandleEvents::HandleEventSBThreadBitStackChanged(const lldb::SBEvent &vEvent)
{
- lldb::SBThread thread = lldb::SBThread::GetThreadFromEvent( vEvent );
- if( !thread.IsValid() )
- return MIstatus::success;
+ lldb::SBThread thread = lldb::SBThread::GetThreadFromEvent(vEvent);
+ if (!thread.IsValid())
+ return MIstatus::success;
- lldb::SBStream streamOut;
- const bool bOk = thread.GetStatus( streamOut );
- return bOk && TextToStdout( streamOut.GetData() );
+ lldb::SBStream streamOut;
+ const bool bOk = thread.GetStatus(streamOut);
+ return bOk && TextToStdout(streamOut.GetData());
}
-
+
//++ ------------------------------------------------------------------------------------
-// Details: Handle a LLDB SBCommandInterpreter event.
-// Type: Method.
-// Args: vEvent - (R) An LLDB command interpreter event.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
+// Details: Handle a LLDB SBCommandInterpreter event.
+// Type: Method.
+// Args: vEvent - (R) An LLDB command interpreter event.
+// Return: MIstatus::success - Functionality succeeded.
+// MIstatus::failure - Functionality failed.
+// Throws: None.
//--
-bool CMICmnLLDBDebuggerHandleEvents::HandleEventSBCommandInterpreter( const lldb::SBEvent & vEvent )
+bool
+CMICmnLLDBDebuggerHandleEvents::HandleEventSBCommandInterpreter(const lldb::SBEvent &vEvent)
{
- // This function is not used
- // *** This function is under development
+ // This function is not used
+ // *** This function is under development
- const MIchar * pEventType = "";
+ const MIchar *pEventType = "";
const MIuint nEventType = vEvent.GetType();
- switch( nEventType )
- {
- case lldb::SBCommandInterpreter::eBroadcastBitThreadShouldExit:
- pEventType ="eBroadcastBitThreadShouldExit";
- // ToDo: IOR: Reminder to maybe handle this here
- //const MIuint nEventType = event.GetType();
- //if( nEventType & lldb::SBCommandInterpreter::eBroadcastBitThreadShouldExit )
- //{
- // m_pClientDriver->SetExitApplicationFlag();
- // vrbYesExit = true;
- // return MIstatus::success;
- //} break;
- case lldb::SBCommandInterpreter::eBroadcastBitResetPrompt:
- pEventType = "eBroadcastBitResetPrompt";
- break;
- case lldb::SBCommandInterpreter::eBroadcastBitQuitCommandReceived:
- pEventType = "eBroadcastBitQuitCommandReceived";
- break;
- case lldb::SBCommandInterpreter::eBroadcastBitAsynchronousOutputData:
- pEventType = "eBroadcastBitAsynchronousOutputData";
- break;
- case lldb::SBCommandInterpreter::eBroadcastBitAsynchronousErrorData:
- pEventType = "eBroadcastBitAsynchronousErrorData";
- break;
- default:
- {
- const CMIUtilString msg( CMIUtilString::Format( MIRSRC( IDS_LLDBOUTOFBAND_ERR_UNKNOWN_EVENT ), "SBCommandInterpreter", (MIuint) nEventType ) );
- SetErrorDescription( msg );
- return MIstatus::failure;
- }
- }
- m_pLog->WriteLog( CMIUtilString::Format( "##### An SBCommandInterpreter event occurred: %s", pEventType ) );
-
- return MIstatus::success;
+ switch (nEventType)
+ {
+ case lldb::SBCommandInterpreter::eBroadcastBitThreadShouldExit:
+ pEventType = "eBroadcastBitThreadShouldExit";
+ // ToDo: IOR: Reminder to maybe handle this here
+ // const MIuint nEventType = event.GetType();
+ // if (nEventType & lldb::SBCommandInterpreter::eBroadcastBitThreadShouldExit)
+ //{
+ // m_pClientDriver->SetExitApplicationFlag();
+ // vrbYesExit = true;
+ // return MIstatus::success;
+ //} break;
+ case lldb::SBCommandInterpreter::eBroadcastBitResetPrompt:
+ pEventType = "eBroadcastBitResetPrompt";
+ break;
+ case lldb::SBCommandInterpreter::eBroadcastBitQuitCommandReceived:
+ pEventType = "eBroadcastBitQuitCommandReceived";
+ break;
+ case lldb::SBCommandInterpreter::eBroadcastBitAsynchronousOutputData:
+ pEventType = "eBroadcastBitAsynchronousOutputData";
+ break;
+ case lldb::SBCommandInterpreter::eBroadcastBitAsynchronousErrorData:
+ pEventType = "eBroadcastBitAsynchronousErrorData";
+ break;
+ default:
+ {
+ const CMIUtilString msg(
+ CMIUtilString::Format(MIRSRC(IDS_LLDBOUTOFBAND_ERR_UNKNOWN_EVENT), "SBCommandInterpreter", (MIuint)nEventType));
+ SetErrorDescription(msg);
+ return MIstatus::failure;
+ }
+ }
+ m_pLog->WriteLog(CMIUtilString::Format("##### An SBCommandInterpreter event occurred: %s", pEventType));
+
+ return MIstatus::success;
}
-
+
//++ ------------------------------------------------------------------------------------
-// Details: Handle SBProcess event eBroadcastBitStateChanged.
-// Type: Method.
-// Args: vEvent - (R) An LLDB event object.
-// vrbExitAppEvent - (W) True - Received LLDB exit app event, false = did not.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
+// Details: Handle SBProcess event eBroadcastBitStateChanged.
+// Type: Method.
+// Args: vEvent - (R) An LLDB event object.
+// vrbExitAppEvent - (W) True - Received LLDB exit app event, false = did not.
+// Return: MIstatus::success - Functionality succeeded.
+// MIstatus::failure - Functionality failed.
+// Throws: None.
//--
-bool CMICmnLLDBDebuggerHandleEvents::HandleProcessEventBroadcastBitStateChanged( const lldb::SBEvent & vEvent, bool & vrbExitAppEvent )
+bool
+CMICmnLLDBDebuggerHandleEvents::HandleProcessEventBroadcastBitStateChanged(const lldb::SBEvent &vEvent, bool &vrbExitAppEvent)
{
- bool bOk = ChkForStateChanges();
- bOk = bOk && GetProcessStdout();
- bOk = bOk && GetProcessStderr();
- if( !bOk )
- return MIstatus::failure;
-
- // Something changed in the process; get the event and report the process's current
- // status and location
- const lldb::StateType eEventState = lldb::SBProcess::GetStateFromEvent( vEvent );
- if( eEventState == lldb::eStateInvalid )
- return MIstatus::success;
-
- lldb::SBProcess process = lldb::SBProcess::GetProcessFromEvent( vEvent );
- if( !process.IsValid() )
- {
- const CMIUtilString msg( CMIUtilString::Format( MIRSRC( IDS_LLDBOUTOFBAND_ERR_PROCESS_INVALID ), "SBProcess", "HandleProcessEventBroadcastBitStateChanged()" ) );
- SetErrorDescription( msg );
- return MIstatus::failure;
- }
-
- bool bShouldBrk = true;
- const MIchar * pEventType = "";
- switch( eEventState )
- {
- case lldb::eStateUnloaded:
- pEventType = "eStateUnloaded";
- break;
- case lldb::eStateConnected:
- pEventType = "eStateConnected";
- break;
- case lldb::eStateAttaching:
- pEventType = "eStateAttaching";
- break;
- case lldb::eStateLaunching:
- pEventType ="eStateLaunching";
- break;
- case lldb::eStateStopped:
- pEventType = "eStateStopped";
- bOk = HandleProcessEventStateStopped( bShouldBrk );
- if( bShouldBrk )
- break;
- case lldb::eStateCrashed:
- case lldb::eStateSuspended:
- pEventType = "eStateSuspended";
- bOk = HandleProcessEventStateSuspended( vEvent );
- break;
- case lldb::eStateRunning:
- pEventType = "eStateRunning";
- bOk = HandleProcessEventStateRunning();
- break;
- case lldb::eStateStepping:
- pEventType = "eStateStepping";
- break;
- case lldb::eStateDetached:
- pEventType = "eStateDetached";
- break;
- case lldb::eStateExited:
- pEventType = "eStateExited";
- vrbExitAppEvent = true;
- bOk = HandleProcessEventStateExited();
- break;
- default:
- {
- const CMIUtilString msg( CMIUtilString::Format( MIRSRC( IDS_LLDBOUTOFBAND_ERR_UNKNOWN_EVENT ), "SBProcess BroadcastBitStateChanged", (MIuint) eEventState ) );
- SetErrorDescription( msg );
- return MIstatus::failure;
- }
- }
-
- // ToDo: Remove when finished coding application
- m_pLog->WriteLog( CMIUtilString::Format( "##### An SB Process event BroadcastBitStateChanged occurred: %s", pEventType ) );
-
- return bOk;
+ bool bOk = ChkForStateChanges();
+ bOk = bOk && GetProcessStdout();
+ bOk = bOk && GetProcessStderr();
+ if (!bOk)
+ return MIstatus::failure;
+
+ // Something changed in the process; get the event and report the process's current
+ // status and location
+ const lldb::StateType eEventState = lldb::SBProcess::GetStateFromEvent(vEvent);
+ if (eEventState == lldb::eStateInvalid)
+ return MIstatus::success;
+
+ lldb::SBProcess process = lldb::SBProcess::GetProcessFromEvent(vEvent);
+ if (!process.IsValid())
+ {
+ const CMIUtilString msg(CMIUtilString::Format(MIRSRC(IDS_LLDBOUTOFBAND_ERR_PROCESS_INVALID), "SBProcess",
+ "HandleProcessEventBroadcastBitStateChanged()"));
+ SetErrorDescription(msg);
+ return MIstatus::failure;
+ }
+
+ bool bShouldBrk = true;
+ const MIchar *pEventType = "";
+ switch (eEventState)
+ {
+ case lldb::eStateUnloaded:
+ pEventType = "eStateUnloaded";
+ break;
+ case lldb::eStateConnected:
+ pEventType = "eStateConnected";
+ break;
+ case lldb::eStateAttaching:
+ pEventType = "eStateAttaching";
+ break;
+ case lldb::eStateLaunching:
+ pEventType = "eStateLaunching";
+ break;
+ case lldb::eStateStopped:
+ pEventType = "eStateStopped";
+ bOk = HandleProcessEventStateStopped(bShouldBrk);
+ if (bShouldBrk)
+ break;
+ case lldb::eStateCrashed:
+ case lldb::eStateSuspended:
+ pEventType = "eStateSuspended";
+ bOk = HandleProcessEventStateSuspended(vEvent);
+ break;
+ case lldb::eStateRunning:
+ pEventType = "eStateRunning";
+ bOk = HandleProcessEventStateRunning();
+ break;
+ case lldb::eStateStepping:
+ pEventType = "eStateStepping";
+ break;
+ case lldb::eStateDetached:
+ pEventType = "eStateDetached";
+ break;
+ case lldb::eStateExited:
+ pEventType = "eStateExited";
+ vrbExitAppEvent = true;
+ bOk = HandleProcessEventStateExited();
+ break;
+ default:
+ {
+ const CMIUtilString msg(CMIUtilString::Format(MIRSRC(IDS_LLDBOUTOFBAND_ERR_UNKNOWN_EVENT), "SBProcess BroadcastBitStateChanged",
+ (MIuint)eEventState));
+ SetErrorDescription(msg);
+ return MIstatus::failure;
+ }
+ }
+
+ // ToDo: Remove when finished coding application
+ m_pLog->WriteLog(CMIUtilString::Format("##### An SB Process event BroadcastBitStateChanged occurred: %s", pEventType));
+
+ return bOk;
}
//++ ------------------------------------------------------------------------------------
-// Details: Asynchronous event handler for LLDB Process state suspended.
-// Type: Method.
-// Args: vEvent - (R) An LLDB event object.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
+// Details: Asynchronous event handler for LLDB Process state suspended.
+// Type: Method.
+// Args: vEvent - (R) An LLDB event object.
+// Return: MIstatus::success - Functionality succeeded.
+// MIstatus::failure - Functionality failed.
+// Throws: None.
//--
-bool CMICmnLLDBDebuggerHandleEvents::HandleProcessEventStateSuspended( const lldb::SBEvent & vEvent )
+bool
+CMICmnLLDBDebuggerHandleEvents::HandleProcessEventStateSuspended(const lldb::SBEvent &vEvent)
{
- // Make sure the program hasn't been auto-restarted:
- if( lldb::SBProcess::GetRestartedFromEvent( vEvent ) )
- return MIstatus::success;
-
- bool bOk = MIstatus::success;
- lldb::SBDebugger & rDebugger = CMICmnLLDBDebugSessionInfo::Instance().m_rLldbDebugger;
- lldb::SBProcess & rProcess = CMICmnLLDBDebugSessionInfo::Instance().m_lldbProcess;
- lldb::SBTarget target = rProcess.GetTarget();
- if( rDebugger.GetSelectedTarget() == target )
- {
- if( !UpdateSelectedThread() )
- return MIstatus::failure;
-
- lldb::SBCommandReturnObject result;
- const lldb::ReturnStatus status = rDebugger.GetCommandInterpreter().HandleCommand( "process status", result, false ); MIunused( status );
- bOk = TextToStderr( result.GetError() );
- bOk = bOk && TextToStdout( result.GetOutput() );
- }
- else
- {
- lldb::SBStream streamOut;
- const MIuint nTargetIndex = rDebugger.GetIndexOfTarget( target );
- if( nTargetIndex != UINT_MAX )
- streamOut.Printf( "Target %d: (", nTargetIndex );
- else
- streamOut.Printf( "Target <unknown index>: (" );
- target.GetDescription( streamOut, lldb::eDescriptionLevelBrief );
- streamOut.Printf( ") stopped.\n" );
- bOk = TextToStdout( streamOut.GetData() );
- }
-
- return bOk;
+ // Make sure the program hasn't been auto-restarted:
+ if (lldb::SBProcess::GetRestartedFromEvent(vEvent))
+ return MIstatus::success;
+
+ bool bOk = MIstatus::success;
+ lldb::SBDebugger &rDebugger = CMICmnLLDBDebugSessionInfo::Instance().m_rLldbDebugger;
+ lldb::SBProcess &rProcess = CMICmnLLDBDebugSessionInfo::Instance().m_lldbProcess;
+ lldb::SBTarget target = rProcess.GetTarget();
+ if (rDebugger.GetSelectedTarget() == target)
+ {
+ if (!UpdateSelectedThread())
+ return MIstatus::failure;
+
+ lldb::SBCommandReturnObject result;
+ const lldb::ReturnStatus status = rDebugger.GetCommandInterpreter().HandleCommand("process status", result, false);
+ MIunused(status);
+ bOk = TextToStderr(result.GetError());
+ bOk = bOk && TextToStdout(result.GetOutput());
+ }
+ else
+ {
+ lldb::SBStream streamOut;
+ const MIuint nTargetIndex = rDebugger.GetIndexOfTarget(target);
+ if (nTargetIndex != UINT_MAX)
+ streamOut.Printf("Target %d: (", nTargetIndex);
+ else
+ streamOut.Printf("Target <unknown index>: (");
+ target.GetDescription(streamOut, lldb::eDescriptionLevelBrief);
+ streamOut.Printf(") stopped.\n");
+ bOk = TextToStdout(streamOut.GetData());
+ }
+
+ return bOk;
}
-
+
//++ ------------------------------------------------------------------------------------
-// Details: Print to stdout MI formatted text to indicate process stopped.
-// Type: Method.
-// Args: vwrbShouldBrk - (W) True = Yes break, false = do not.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
+// Details: Print to stdout MI formatted text to indicate process stopped.
+// Type: Method.
+// Args: vwrbShouldBrk - (W) True = Yes break, false = do not.
+// Return: MIstatus::success - Functionality succeeded.
+// MIstatus::failure - Functionality failed.
+// Throws: None.
//--
-bool CMICmnLLDBDebuggerHandleEvents::HandleProcessEventStateStopped( bool & vwrbShouldBrk )
+bool
+CMICmnLLDBDebuggerHandleEvents::HandleProcessEventStateStopped(bool &vwrbShouldBrk)
{
- if( !UpdateSelectedThread() )
- return MIstatus::failure;
-
- const MIchar * pEventType = "";
- bool bOk = MIstatus::success;
- lldb::SBProcess & rProcess = CMICmnLLDBDebugSessionInfo::Instance().m_lldbProcess;
- const lldb::StopReason eStoppedReason = rProcess.GetSelectedThread().GetStopReason();
- switch( eStoppedReason )
- {
- case lldb::eStopReasonInvalid:
- pEventType = "eStopReasonInvalid";
- vwrbShouldBrk = false;
- break;
- case lldb::eStopReasonNone:
- pEventType = "eStopReasonNone";
- break;
- case lldb::eStopReasonTrace:
- pEventType = "eStopReasonTrace";
- bOk = HandleProcessEventStopReasonTrace();
- break;
- case lldb::eStopReasonBreakpoint:
- pEventType = "eStopReasonBreakpoint";
- bOk = HandleProcessEventStopReasonBreakpoint();
- break;
- case lldb::eStopReasonWatchpoint:
- pEventType = "eStopReasonWatchpoint";
- break;
- case lldb::eStopReasonSignal:
- pEventType = "eStopReasonSignal";
- bOk = HandleProcessEventStopSignal( vwrbShouldBrk );
- break;
- case lldb::eStopReasonException:
- pEventType ="eStopReasonException";
- break;
- case lldb::eStopReasonExec:
- pEventType = "eStopReasonExec";
- break;
- case lldb::eStopReasonPlanComplete:
- pEventType = "eStopReasonPlanComplete";
- bOk = HandleProcessEventStopReasonTrace();
- break;
- case lldb::eStopReasonThreadExiting:
- pEventType = "eStopReasonThreadExiting";
- break;
- default:
- {
- vwrbShouldBrk = false;
-
- // MI print "*stopped,reason=\"%d\",stopped-threads=\"all\",from-thread=\"%u\""
- const CMIUtilString strReason( CMIUtilString::Format( "%d", eStoppedReason ) );
- const CMICmnMIValueConst miValueConst( strReason );
- const CMICmnMIValueResult miValueResult( "reason", miValueConst );
- CMICmnMIOutOfBandRecord miOutOfBandRecord( CMICmnMIOutOfBandRecord::eOutOfBand_Stopped, miValueResult );
- const CMICmnMIValueConst miValueConst2( "all" );
- const CMICmnMIValueResult miValueResult2( "stopped-threads", miValueConst2 );
- bOk = miOutOfBandRecord.Add( miValueResult2 );
- const CMIUtilString strFromThread( CMIUtilString::Format( "%u", rProcess.GetSelectedThread().GetIndexID() ) );
- const CMICmnMIValueConst miValueConst3( strFromThread );
- const CMICmnMIValueResult miValueResult3( "from-thread", miValueConst3 );
- bOk = bOk && miOutOfBandRecord.Add( miValueResult3 );
- bOk = bOk && MiOutOfBandRecordToStdout( miOutOfBandRecord );
- bOk = bOk && TextToStdout( "(gdb)" );
- }
- }
-
- // ToDo: Remove when finished coding application
- m_pLog->WriteLog( CMIUtilString::Format( "##### An SB Process event stop state occurred: %s", pEventType ) );
-
- return bOk;
+ if (!UpdateSelectedThread())
+ return MIstatus::failure;
+
+ const MIchar *pEventType = "";
+ bool bOk = MIstatus::success;
+ lldb::SBProcess &rProcess = CMICmnLLDBDebugSessionInfo::Instance().m_lldbProcess;
+ const lldb::StopReason eStoppedReason = rProcess.GetSelectedThread().GetStopReason();
+ switch (eStoppedReason)
+ {
+ case lldb::eStopReasonInvalid:
+ pEventType = "eStopReasonInvalid";
+ vwrbShouldBrk = false;
+ break;
+ case lldb::eStopReasonNone:
+ pEventType = "eStopReasonNone";
+ break;
+ case lldb::eStopReasonTrace:
+ pEventType = "eStopReasonTrace";
+ bOk = HandleProcessEventStopReasonTrace();
+ break;
+ case lldb::eStopReasonBreakpoint:
+ pEventType = "eStopReasonBreakpoint";
+ bOk = HandleProcessEventStopReasonBreakpoint();
+ break;
+ case lldb::eStopReasonWatchpoint:
+ pEventType = "eStopReasonWatchpoint";
+ break;
+ case lldb::eStopReasonSignal:
+ pEventType = "eStopReasonSignal";
+ bOk = HandleProcessEventStopSignal(vwrbShouldBrk);
+ break;
+ case lldb::eStopReasonException:
+ pEventType = "eStopReasonException";
+ break;
+ case lldb::eStopReasonExec:
+ pEventType = "eStopReasonExec";
+ break;
+ case lldb::eStopReasonPlanComplete:
+ pEventType = "eStopReasonPlanComplete";
+ bOk = HandleProcessEventStopReasonTrace();
+ break;
+ case lldb::eStopReasonThreadExiting:
+ pEventType = "eStopReasonThreadExiting";
+ break;
+ }
+
+ // ToDo: Remove when finished coding application
+ m_pLog->WriteLog(CMIUtilString::Format("##### An SB Process event stop state occurred: %s", pEventType));
+
+ return bOk;
}
//++ ------------------------------------------------------------------------------------
-// Details: Asynchronous event handler for LLDB Process stop signal.
-// Type: Method.
-// Args: vwrbShouldBrk - (W) True = Yes break, false = do not.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
+// Details: Asynchronous event handler for LLDB Process stop signal.
+// Type: Method.
+// Args: vwrbShouldBrk - (W) True = Yes break, false = do not.
+// Return: MIstatus::success - Functionality succeeded.
+// MIstatus::failure - Functionality failed.
+// Throws: None.
//--
-bool CMICmnLLDBDebuggerHandleEvents::HandleProcessEventStopSignal( bool & vwrbShouldBrk )
+bool
+CMICmnLLDBDebuggerHandleEvents::HandleProcessEventStopSignal(bool &vwrbShouldBrk)
{
- bool bOk = MIstatus::success;
-
- lldb::SBProcess & rProcess = CMICmnLLDBDebugSessionInfo::Instance().m_lldbProcess;
- const MIuint64 nStopReason = rProcess.GetSelectedThread().GetStopReasonDataAtIndex( 0 );
- switch( nStopReason )
- {
- case 2: // Terminal interrupt signal. SIGINT
- {
- // MI print "*stopped,reason=\"signal-received\",signal-name=\"SIGNINT\",signal-meaning=\"Interrupt\",frame={%s}"
- const CMICmnMIValueConst miValueConst( "signal-received" );
- const CMICmnMIValueResult miValueResult( "reason", miValueConst );
- CMICmnMIOutOfBandRecord miOutOfBandRecord( CMICmnMIOutOfBandRecord::eOutOfBand_Stopped, miValueResult );
- const CMICmnMIValueConst miValueConst2( "SIGINT" );
- const CMICmnMIValueResult miValueResult2( "signal-name", miValueConst2 );
- bOk = miOutOfBandRecord.Add( miValueResult2 );
- const CMICmnMIValueConst miValueConst3( "Interrupt" );
- const CMICmnMIValueResult miValueResult3( "signal-meaning", miValueConst3 );
- bOk = bOk && miOutOfBandRecord.Add( miValueResult3 );
- CMICmnMIValueTuple miValueTuple;
- bOk = bOk && MiHelpGetCurrentThreadFrame( miValueTuple );
- const CMICmnMIValueResult miValueResult5( "frame", miValueTuple );
- bOk = bOk && miOutOfBandRecord.Add( miValueResult5 );
- bOk = bOk && MiOutOfBandRecordToStdout( miOutOfBandRecord );
- bOk = bOk && TextToStdout( "(gdb)" );
- }
- break;
- case 11: // Invalid memory reference. SIGSEGV
- {
- // MI print "*stopped,reason=\"signal-received\",signal-name=\"SIGSEGV\",signal-meaning=\"Segmentation fault\",thread-id=\"%d\",frame={%s}"
- const CMICmnMIValueConst miValueConst( "signal-received" );
- const CMICmnMIValueResult miValueResult( "reason", miValueConst );
- CMICmnMIOutOfBandRecord miOutOfBandRecord( CMICmnMIOutOfBandRecord::eOutOfBand_Stopped, miValueResult );
- const CMICmnMIValueConst miValueConst2( "SIGSEGV" );
- const CMICmnMIValueResult miValueResult2( "signal-name", miValueConst2 );
- bOk = miOutOfBandRecord.Add( miValueResult2 );
- const CMICmnMIValueConst miValueConst3( "Segmentation fault" );
- const CMICmnMIValueResult miValueResult3( "signal-meaning", miValueConst3 );
- bOk = bOk && miOutOfBandRecord.Add( miValueResult3 );
- const CMIUtilString strThreadId( CMIUtilString::Format( "%d", rProcess.GetSelectedThread().GetIndexID() ) );
- const CMICmnMIValueConst miValueConst4( strThreadId );
- const CMICmnMIValueResult miValueResult4( "thread-id", miValueConst4 );
- bOk = bOk && miOutOfBandRecord.Add( miValueResult4 );
- CMICmnMIValueTuple miValueTuple;
- bOk = bOk && MiHelpGetCurrentThreadFrame( miValueTuple );
- const CMICmnMIValueResult miValueResult5( "frame", miValueTuple );
- bOk = bOk && miOutOfBandRecord.Add( miValueResult5 );
- bOk = bOk && MiOutOfBandRecordToStdout( miOutOfBandRecord );
- // Note no "(gdb)" output here
- }
- break;
- case 19:
- if( rProcess.IsValid() )
- rProcess.Continue();
- break;
- case 5: // Trace/breakpoint trap. SIGTRAP
- {
- lldb::SBThread thread = rProcess.GetSelectedThread();
- const MIuint nFrames = thread.GetNumFrames();
- if( nFrames > 0 )
- {
- lldb::SBFrame frame = thread.GetFrameAtIndex( 0 );
- const char * pFnName = frame.GetFunctionName();
- if( pFnName != nullptr )
- {
- const CMIUtilString fnName = CMIUtilString( pFnName );
- static const CMIUtilString threadCloneFn = CMIUtilString( "__pthread_clone" );
-
- if( CMIUtilString::Compare( threadCloneFn, fnName ) )
- {
- if( rProcess.IsValid() )
- {
- rProcess.Continue();
- vwrbShouldBrk = true;
- break;
- }
- }
- }
- }
- }
- default:
- {
- // MI print "*stopped,reason=\"signal-received\",signal=\"%lld\",stopped-threads=\"all\""
- const CMICmnMIValueConst miValueConst( "signal-received" );
- const CMICmnMIValueResult miValueResult( "reason", miValueConst );
- CMICmnMIOutOfBandRecord miOutOfBandRecord( CMICmnMIOutOfBandRecord::eOutOfBand_Stopped, miValueResult );
- const CMIUtilString strReason( CMIUtilString::Format( "%lld", nStopReason ) );
- const CMICmnMIValueConst miValueConst2( strReason );
- const CMICmnMIValueResult miValueResult2( "signal", miValueConst2 );
- bOk = miOutOfBandRecord.Add( miValueResult2 );
- const CMICmnMIValueConst miValueConst3( "all" );
- const CMICmnMIValueResult miValueResult3( "stopped-threads", miValueConst3 );
- bOk = bOk && miOutOfBandRecord.Add( miValueResult3 );
- bOk = bOk && MiOutOfBandRecordToStdout( miOutOfBandRecord );
- bOk = bOk && TextToStdout( "(gdb)" );
- }
- } // switch( nStopReason )
-
- return bOk;
+ bool bOk = MIstatus::success;
+
+ lldb::SBProcess &rProcess = CMICmnLLDBDebugSessionInfo::Instance().m_lldbProcess;
+ const MIuint64 nStopReason = rProcess.GetSelectedThread().GetStopReasonDataAtIndex(0);
+ switch (nStopReason)
+ {
+ case 2: // Terminal interrupt signal. SIGINT
+ {
+ // MI print "*stopped,reason=\"signal-received\",signal-name=\"SIGNINT\",signal-meaning=\"Interrupt\",frame={%s}"
+ const CMICmnMIValueConst miValueConst("signal-received");
+ const CMICmnMIValueResult miValueResult("reason", miValueConst);
+ CMICmnMIOutOfBandRecord miOutOfBandRecord(CMICmnMIOutOfBandRecord::eOutOfBand_Stopped, miValueResult);
+ const CMICmnMIValueConst miValueConst2("SIGINT");
+ const CMICmnMIValueResult miValueResult2("signal-name", miValueConst2);
+ bOk = miOutOfBandRecord.Add(miValueResult2);
+ const CMICmnMIValueConst miValueConst3("Interrupt");
+ const CMICmnMIValueResult miValueResult3("signal-meaning", miValueConst3);
+ bOk = bOk && miOutOfBandRecord.Add(miValueResult3);
+ CMICmnMIValueTuple miValueTuple;
+ bOk = bOk && MiHelpGetCurrentThreadFrame(miValueTuple);
+ const CMICmnMIValueResult miValueResult5("frame", miValueTuple);
+ bOk = bOk && miOutOfBandRecord.Add(miValueResult5);
+ bOk = bOk && MiOutOfBandRecordToStdout(miOutOfBandRecord);
+ bOk = bOk && TextToStdout("(gdb)");
+ }
+ break;
+ case 11: // Invalid memory reference. SIGSEGV
+ {
+ // MI print "*stopped,reason=\"signal-received\",signal-name=\"SIGSEGV\",signal-meaning=\"Segmentation
+ // fault\",thread-id=\"%d\",frame={%s}"
+ const CMICmnMIValueConst miValueConst("signal-received");
+ const CMICmnMIValueResult miValueResult("reason", miValueConst);
+ CMICmnMIOutOfBandRecord miOutOfBandRecord(CMICmnMIOutOfBandRecord::eOutOfBand_Stopped, miValueResult);
+ const CMICmnMIValueConst miValueConst2("SIGSEGV");
+ const CMICmnMIValueResult miValueResult2("signal-name", miValueConst2);
+ bOk = miOutOfBandRecord.Add(miValueResult2);
+ const CMICmnMIValueConst miValueConst3("Segmentation fault");
+ const CMICmnMIValueResult miValueResult3("signal-meaning", miValueConst3);
+ bOk = bOk && miOutOfBandRecord.Add(miValueResult3);
+ const CMIUtilString strThreadId(CMIUtilString::Format("%d", rProcess.GetSelectedThread().GetIndexID()));
+ const CMICmnMIValueConst miValueConst4(strThreadId);
+ const CMICmnMIValueResult miValueResult4("thread-id", miValueConst4);
+ bOk = bOk && miOutOfBandRecord.Add(miValueResult4);
+ CMICmnMIValueTuple miValueTuple;
+ bOk = bOk && MiHelpGetCurrentThreadFrame(miValueTuple);
+ const CMICmnMIValueResult miValueResult5("frame", miValueTuple);
+ bOk = bOk && miOutOfBandRecord.Add(miValueResult5);
+ bOk = bOk && MiOutOfBandRecordToStdout(miOutOfBandRecord);
+ // Note no "(gdb)" output here
+ }
+ break;
+ case 19:
+ if (rProcess.IsValid())
+ rProcess.Continue();
+ break;
+ case 5: // Trace/breakpoint trap. SIGTRAP
+ {
+ lldb::SBThread thread = rProcess.GetSelectedThread();
+ const MIuint nFrames = thread.GetNumFrames();
+ if (nFrames > 0)
+ {
+ lldb::SBFrame frame = thread.GetFrameAtIndex(0);
+ const char *pFnName = frame.GetFunctionName();
+ if (pFnName != nullptr)
+ {
+ const CMIUtilString fnName = CMIUtilString(pFnName);
+ static const CMIUtilString threadCloneFn = CMIUtilString("__pthread_clone");
+
+ if (CMIUtilString::Compare(threadCloneFn, fnName))
+ {
+ if (rProcess.IsValid())
+ {
+ rProcess.Continue();
+ vwrbShouldBrk = true;
+ break;
+ }
+ }
+ }
+ }
+ }
+ default:
+ {
+ // MI print "*stopped,reason=\"signal-received\",signal=\"%lld\",stopped-threads=\"all\""
+ const CMICmnMIValueConst miValueConst("signal-received");
+ const CMICmnMIValueResult miValueResult("reason", miValueConst);
+ CMICmnMIOutOfBandRecord miOutOfBandRecord(CMICmnMIOutOfBandRecord::eOutOfBand_Stopped, miValueResult);
+ const CMIUtilString strReason(CMIUtilString::Format("%lld", nStopReason));
+ const CMICmnMIValueConst miValueConst2(strReason);
+ const CMICmnMIValueResult miValueResult2("signal", miValueConst2);
+ bOk = miOutOfBandRecord.Add(miValueResult2);
+ const CMICmnMIValueConst miValueConst3("all");
+ const CMICmnMIValueResult miValueResult3("stopped-threads", miValueConst3);
+ bOk = bOk && miOutOfBandRecord.Add(miValueResult3);
+ bOk = bOk && MiOutOfBandRecordToStdout(miOutOfBandRecord);
+ bOk = bOk && TextToStdout("(gdb)");
+ }
+ } // switch( nStopReason )
+
+ return bOk;
}
-
+
//++ ------------------------------------------------------------------------------------
-// Details: Form partial MI response in a MI value tuple object.
-// Type: Method.
-// Args: vwrMiValueTuple - (W) MI value tuple object.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
+// Details: Form partial MI response in a MI value tuple object.
+// Type: Method.
+// Args: vwrMiValueTuple - (W) MI value tuple object.
+// Return: MIstatus::success - Functionality succeeded.
+// MIstatus::failure - Functionality failed.
+// Throws: None.
//--
-bool CMICmnLLDBDebuggerHandleEvents::MiHelpGetCurrentThreadFrame( CMICmnMIValueTuple & vwrMiValueTuple )
+bool
+CMICmnLLDBDebuggerHandleEvents::MiHelpGetCurrentThreadFrame(CMICmnMIValueTuple &vwrMiValueTuple)
{
- CMIUtilString strThreadFrame;
- lldb::SBProcess & rProcess = CMICmnLLDBDebugSessionInfo::Instance().m_lldbProcess;
- lldb::SBThread thread = rProcess.GetSelectedThread();
- const MIuint nFrame = thread.GetNumFrames();
- if( nFrame == 0 )
- {
- // MI print "addr=\"??\",func=\"??\",file=\"??\",fullname=\"??\",line=\"??\""
- const CMICmnMIValueConst miValueConst( "??" );
- const CMICmnMIValueResult miValueResult( "addr", miValueConst );
- CMICmnMIValueTuple miValueTuple( miValueResult );
- const CMICmnMIValueResult miValueResult2( "func", miValueConst );
- miValueTuple.Add( miValueResult2 );
- const CMICmnMIValueResult miValueResult4( "file", miValueConst );
- miValueTuple.Add( miValueResult4 );
- const CMICmnMIValueResult miValueResult5( "fullname", miValueConst );
- miValueTuple.Add( miValueResult5 );
- const CMICmnMIValueResult miValueResult6( "line", miValueConst );
- miValueTuple.Add( miValueResult6 );
-
- vwrMiValueTuple = miValueTuple;
-
- return MIstatus::success;
- }
-
- CMICmnMIValueTuple miValueTuple;
- if( !CMICmnLLDBDebugSessionInfo::Instance().MIResponseFormFrameInfo( thread, 0, miValueTuple ) )
- {
- SetErrorDescription( CMIUtilString::Format( MIRSRC( IDS_LLDBOUTOFBAND_ERR_FORM_MI_RESPONSE ), "MiHelpGetCurrentThreadFrame()" ) );
- return MIstatus::failure;
- }
-
- vwrMiValueTuple = miValueTuple;
-
- return MIstatus::success;
+ CMIUtilString strThreadFrame;
+ lldb::SBProcess &rProcess = CMICmnLLDBDebugSessionInfo::Instance().m_lldbProcess;
+ lldb::SBThread thread = rProcess.GetSelectedThread();
+ const MIuint nFrame = thread.GetNumFrames();
+ if (nFrame == 0)
+ {
+ // MI print "addr=\"??\",func=\"??\",file=\"??\",fullname=\"??\",line=\"??\""
+ const CMICmnMIValueConst miValueConst("??");
+ const CMICmnMIValueResult miValueResult("addr", miValueConst);
+ CMICmnMIValueTuple miValueTuple(miValueResult);
+ const CMICmnMIValueResult miValueResult2("func", miValueConst);
+ miValueTuple.Add(miValueResult2);
+ const CMICmnMIValueResult miValueResult4("file", miValueConst);
+ miValueTuple.Add(miValueResult4);
+ const CMICmnMIValueResult miValueResult5("fullname", miValueConst);
+ miValueTuple.Add(miValueResult5);
+ const CMICmnMIValueResult miValueResult6("line", miValueConst);
+ miValueTuple.Add(miValueResult6);
+
+ vwrMiValueTuple = miValueTuple;
+
+ return MIstatus::success;
+ }
+
+ CMICmnMIValueTuple miValueTuple;
+ if (!CMICmnLLDBDebugSessionInfo::Instance().MIResponseFormFrameInfo(thread, 0, miValueTuple))
+ {
+ SetErrorDescription(CMIUtilString::Format(MIRSRC(IDS_LLDBOUTOFBAND_ERR_FORM_MI_RESPONSE), "MiHelpGetCurrentThreadFrame()"));
+ return MIstatus::failure;
+ }
+
+ vwrMiValueTuple = miValueTuple;
+
+ return MIstatus::success;
}
-
+
//++ ------------------------------------------------------------------------------------
-// Details: Asynchronous event handler for LLDB Process stop reason breakpoint.
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
+// Details: Asynchronous event handler for LLDB Process stop reason breakpoint.
+// Type: Method.
+// Args: None.
+// Return: MIstatus::success - Functionality succeeded.
+// MIstatus::failure - Functionality failed.
+// Throws: None.
//--
-bool CMICmnLLDBDebuggerHandleEvents::HandleProcessEventStopReasonBreakpoint( void )
+bool
+CMICmnLLDBDebuggerHandleEvents::HandleProcessEventStopReasonBreakpoint(void)
{
- // CODETAG_DEBUG_SESSION_RUNNING_PROG_RECEIVED_SIGINT_PAUSE_PROGRAM
- if( !CMIDriver::Instance().SetDriverStateRunningNotDebugging() )
- {
- const CMIUtilString & rErrMsg( CMIDriver::Instance().GetErrorDescription() );
- SetErrorDescription( CMIUtilString::Format( MIRSRC( IDS_LLDBOUTOFBAND_ERR_SETNEWDRIVERSTATE ), "HandleProcessEventStopReasonBreakpoint()", rErrMsg.c_str() ) );
- return MIstatus::failure;
- }
-
- lldb::SBProcess & rProcess = CMICmnLLDBDebugSessionInfo::Instance().m_lldbProcess;
- const MIuint64 brkPtId = rProcess.GetSelectedThread().GetStopReasonDataAtIndex( 0 );
- lldb::SBBreakpoint brkPt = CMICmnLLDBDebugSessionInfo::Instance().m_lldbTarget.GetBreakpointAtIndex( (MIuint) brkPtId );
-
- return MiStoppedAtBreakPoint( brkPtId, brkPt );
+ // CODETAG_DEBUG_SESSION_RUNNING_PROG_RECEIVED_SIGINT_PAUSE_PROGRAM
+ if (!CMIDriver::Instance().SetDriverStateRunningNotDebugging())
+ {
+ const CMIUtilString &rErrMsg(CMIDriver::Instance().GetErrorDescription());
+ SetErrorDescription(CMIUtilString::Format(MIRSRC(IDS_LLDBOUTOFBAND_ERR_SETNEWDRIVERSTATE),
+ "HandleProcessEventStopReasonBreakpoint()", rErrMsg.c_str()));
+ return MIstatus::failure;
+ }
+
+ lldb::SBProcess &rProcess = CMICmnLLDBDebugSessionInfo::Instance().m_lldbProcess;
+ const MIuint64 brkPtId = rProcess.GetSelectedThread().GetStopReasonDataAtIndex(0);
+ lldb::SBBreakpoint brkPt = CMICmnLLDBDebugSessionInfo::Instance().m_lldbTarget.GetBreakpointAtIndex((MIuint)brkPtId);
+
+ return MiStoppedAtBreakPoint(brkPtId, brkPt);
}
//++ ------------------------------------------------------------------------------------
-// Details: Form the MI Out-of-band response for stopped reason on hitting a break point.
-// Type: Method.
-// Args: vBrkPtId - (R) The LLDB break point's ID
-// vBrkPt - (R) THe LLDB break point object.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
+// Details: Form the MI Out-of-band response for stopped reason on hitting a break point.
+// Type: Method.
+// Args: vBrkPtId - (R) The LLDB break point's ID
+// vBrkPt - (R) THe LLDB break point object.
+// Return: MIstatus::success - Functionality succeeded.
+// MIstatus::failure - Functionality failed.
+// Throws: None.
//--
-bool CMICmnLLDBDebuggerHandleEvents::MiStoppedAtBreakPoint( const MIuint64 vBrkPtId, const lldb::SBBreakpoint & vBrkPt )
+bool
+CMICmnLLDBDebuggerHandleEvents::MiStoppedAtBreakPoint(const MIuint64 vBrkPtId, const lldb::SBBreakpoint &vBrkPt)
{
- bool bOk = MIstatus::success;
-
- lldb::SBProcess & rProcess = CMICmnLLDBDebugSessionInfo::Instance().m_lldbProcess;
- lldb::SBThread thread = rProcess.GetSelectedThread();
- const MIuint nFrame = thread.GetNumFrames();
- if( nFrame == 0 )
- {
- // MI print "*stopped,reason=\"breakpoint-hit\",disp=\"del\",bkptno=\"%d\",frame={},thread-id=\"%d\",stopped-threads=\"all\""
- const CMICmnMIValueConst miValueConst( "breakpoint-hit" );
- const CMICmnMIValueResult miValueResult( "reason", miValueConst );
- CMICmnMIOutOfBandRecord miOutOfBandRecord( CMICmnMIOutOfBandRecord::eOutOfBand_Stopped, miValueResult );
- const CMICmnMIValueConst miValueConst2( "del" );
- const CMICmnMIValueResult miValueResult2( "disp", miValueConst2 );
- bOk = miOutOfBandRecord.Add( miValueResult2 );
- const CMIUtilString strBkp( CMIUtilString::Format( "%d", vBrkPtId ) );
- const CMICmnMIValueConst miValueConst3( strBkp );
- CMICmnMIValueResult miValueResult3( "bkptno", miValueConst3 );
- bOk = bOk && miOutOfBandRecord.Add( miValueResult3 );
- const CMICmnMIValueConst miValueConst4( "{}" );
- const CMICmnMIValueResult miValueResult4( "frame", miValueConst4 );
- bOk = bOk && miOutOfBandRecord.Add( miValueResult4 );
- const CMIUtilString strThreadId( CMIUtilString::Format( "%d", vBrkPt.GetThreadIndex() ) );
- const CMICmnMIValueConst miValueConst5( strThreadId );
- const CMICmnMIValueResult miValueResult5( "thread-id", miValueConst5 );
- bOk = bOk && miOutOfBandRecord.Add( miValueResult5 );
- const CMICmnMIValueConst miValueConst6( "all" );
- const CMICmnMIValueResult miValueResult6( "stopped-threads", miValueConst6 );
- bOk = bOk && miOutOfBandRecord.Add( miValueResult6 );
- bOk = bOk && MiOutOfBandRecordToStdout( miOutOfBandRecord );
- bOk = bOk && TextToStdout( "(gdb)" );
- return bOk;
- }
-
- CMICmnLLDBDebugSessionInfo & rSession = CMICmnLLDBDebugSessionInfo::Instance();
-
- lldb::SBFrame frame = thread.GetFrameAtIndex( 0 );
- lldb::addr_t pc = 0;
- CMIUtilString fnName;
- CMIUtilString fileName;
- CMIUtilString path;
- MIuint nLine = 0;
- if( !rSession.GetFrameInfo( frame, pc, fnName, fileName, path, nLine ) )
- {
- SetErrorDescription( CMIUtilString::Format( MIRSRC( IDS_LLDBOUTOFBAND_ERR_FRAME_INFO_GET ), "MiStoppedAtBreakPoint()" ) );
- return MIstatus::failure;
- }
-
- // MI print "*stopped,reason=\"breakpoint-hit\",disp=\"del\",bkptno=\"%d\",frame={addr=\"0x%08x\",func=\"%s\",args=[],file=\"%s\",fullname=\"%s\",line=\"%d\"},thread-id=\"%d\",stopped-threads=\"all\""
- const CMICmnMIValueConst miValueConst( "breakpoint-hit" );
- const CMICmnMIValueResult miValueResult( "reason", miValueConst );
- CMICmnMIOutOfBandRecord miOutOfBandRecord( CMICmnMIOutOfBandRecord::eOutOfBand_Stopped, miValueResult );
- const CMICmnMIValueConst miValueConstA( "del" );
- const CMICmnMIValueResult miValueResultA( "disp", miValueConstA );
- bOk = miOutOfBandRecord.Add( miValueResultA );
- const CMIUtilString strBkp( CMIUtilString::Format( "%d", vBrkPtId ) );
- const CMICmnMIValueConst miValueConstB( strBkp );
- CMICmnMIValueResult miValueResultB( "bkptno", miValueConstB );
- bOk = bOk && miOutOfBandRecord.Add( miValueResultB );
-
- // frame={addr=\"0x%08x\",func=\"%s\",args=[],file=\"%s\",fullname=\"%s\",line=\"%d\"}
- if( bOk )
- {
- CMICmnMIValueList miValueList( true );
- const MIuint maskVarTypes = 0x1000;
- bOk = rSession.MIResponseFormVariableInfo2( frame, maskVarTypes, miValueList );
-
- CMICmnMIValueTuple miValueTuple;
- bOk = bOk && rSession.MIResponseFormFrameInfo2( pc, miValueList.GetString(), fnName, fileName, path, nLine, miValueTuple );
- const CMICmnMIValueResult miValueResult8( "frame", miValueTuple );
- bOk = bOk && miOutOfBandRecord.Add( miValueResult8 );
- }
-
- // Add to MI thread-id=\"%d\",stopped-threads=\"all\"
- if( bOk )
- {
- const CMIUtilString strThreadId( CMIUtilString::Format( "%d", thread.GetIndexID() ) );
- const CMICmnMIValueConst miValueConst8( strThreadId );
- const CMICmnMIValueResult miValueResult8( "thread-id", miValueConst8 );
- bOk = miOutOfBandRecord.Add( miValueResult8 );
- }
- if( bOk )
- {
- const CMICmnMIValueConst miValueConst9( "all" );
- const CMICmnMIValueResult miValueResult9( "stopped-threads", miValueConst9 );
- bOk = miOutOfBandRecord.Add( miValueResult9 );
- bOk = MiOutOfBandRecordToStdout( miOutOfBandRecord );
- bOk = bOk && TextToStdout( "(gdb)" );
- }
-
- return MIstatus::success;
+ bool bOk = MIstatus::success;
+
+ lldb::SBProcess &rProcess = CMICmnLLDBDebugSessionInfo::Instance().m_lldbProcess;
+ lldb::SBThread thread = rProcess.GetSelectedThread();
+ const MIuint nFrame = thread.GetNumFrames();
+ if (nFrame == 0)
+ {
+ // MI print "*stopped,reason=\"breakpoint-hit\",disp=\"del\",bkptno=\"%d\",frame={},thread-id=\"%d\",stopped-threads=\"all\""
+ const CMICmnMIValueConst miValueConst("breakpoint-hit");
+ const CMICmnMIValueResult miValueResult("reason", miValueConst);
+ CMICmnMIOutOfBandRecord miOutOfBandRecord(CMICmnMIOutOfBandRecord::eOutOfBand_Stopped, miValueResult);
+ const CMICmnMIValueConst miValueConst2("del");
+ const CMICmnMIValueResult miValueResult2("disp", miValueConst2);
+ bOk = miOutOfBandRecord.Add(miValueResult2);
+ const CMIUtilString strBkp(CMIUtilString::Format("%d", vBrkPtId));
+ const CMICmnMIValueConst miValueConst3(strBkp);
+ CMICmnMIValueResult miValueResult3("bkptno", miValueConst3);
+ bOk = bOk && miOutOfBandRecord.Add(miValueResult3);
+ const CMICmnMIValueConst miValueConst4("{}");
+ const CMICmnMIValueResult miValueResult4("frame", miValueConst4);
+ bOk = bOk && miOutOfBandRecord.Add(miValueResult4);
+ const CMIUtilString strThreadId(CMIUtilString::Format("%d", vBrkPt.GetThreadIndex()));
+ const CMICmnMIValueConst miValueConst5(strThreadId);
+ const CMICmnMIValueResult miValueResult5("thread-id", miValueConst5);
+ bOk = bOk && miOutOfBandRecord.Add(miValueResult5);
+ const CMICmnMIValueConst miValueConst6("all");
+ const CMICmnMIValueResult miValueResult6("stopped-threads", miValueConst6);
+ bOk = bOk && miOutOfBandRecord.Add(miValueResult6);
+ bOk = bOk && MiOutOfBandRecordToStdout(miOutOfBandRecord);
+ bOk = bOk && TextToStdout("(gdb)");
+ return bOk;
+ }
+
+ CMICmnLLDBDebugSessionInfo &rSession = CMICmnLLDBDebugSessionInfo::Instance();
+
+ lldb::SBFrame frame = thread.GetFrameAtIndex(0);
+ lldb::addr_t pc = 0;
+ CMIUtilString fnName;
+ CMIUtilString fileName;
+ CMIUtilString path;
+ MIuint nLine = 0;
+ if (!rSession.GetFrameInfo(frame, pc, fnName, fileName, path, nLine))
+ {
+ SetErrorDescription(CMIUtilString::Format(MIRSRC(IDS_LLDBOUTOFBAND_ERR_FRAME_INFO_GET), "MiStoppedAtBreakPoint()"));
+ return MIstatus::failure;
+ }
+
+ // MI print
+ // "*stopped,reason=\"breakpoint-hit\",disp=\"del\",bkptno=\"%d\",frame={addr=\"0x%08x\",func=\"%s\",args=[],file=\"%s\",fullname=\"%s\",line=\"%d\"},thread-id=\"%d\",stopped-threads=\"all\""
+ const CMICmnMIValueConst miValueConst("breakpoint-hit");
+ const CMICmnMIValueResult miValueResult("reason", miValueConst);
+ CMICmnMIOutOfBandRecord miOutOfBandRecord(CMICmnMIOutOfBandRecord::eOutOfBand_Stopped, miValueResult);
+ const CMICmnMIValueConst miValueConstA("del");
+ const CMICmnMIValueResult miValueResultA("disp", miValueConstA);
+ bOk = miOutOfBandRecord.Add(miValueResultA);
+ const CMIUtilString strBkp(CMIUtilString::Format("%d", vBrkPtId));
+ const CMICmnMIValueConst miValueConstB(strBkp);
+ CMICmnMIValueResult miValueResultB("bkptno", miValueConstB);
+ bOk = bOk && miOutOfBandRecord.Add(miValueResultB);
+
+ // frame={addr=\"0x%08x\",func=\"%s\",args=[],file=\"%s\",fullname=\"%s\",line=\"%d\"}
+ if (bOk)
+ {
+ CMICmnMIValueList miValueList(true);
+ const MIuint maskVarTypes = CMICmnLLDBDebugSessionInfo::eVariableType_Arguments;
+ bOk = rSession.MIResponseFormVariableInfo2(frame, maskVarTypes, miValueList);
+
+ CMICmnMIValueTuple miValueTuple;
+ bOk = bOk && rSession.MIResponseFormFrameInfo2(pc, miValueList.GetString(), fnName, fileName, path, nLine, miValueTuple);
+ const CMICmnMIValueResult miValueResult8("frame", miValueTuple);
+ bOk = bOk && miOutOfBandRecord.Add(miValueResult8);
+ }
+
+ // Add to MI thread-id=\"%d\",stopped-threads=\"all\"
+ if (bOk)
+ {
+ const CMIUtilString strThreadId(CMIUtilString::Format("%d", thread.GetIndexID()));
+ const CMICmnMIValueConst miValueConst8(strThreadId);
+ const CMICmnMIValueResult miValueResult8("thread-id", miValueConst8);
+ bOk = miOutOfBandRecord.Add(miValueResult8);
+ }
+ if (bOk)
+ {
+ const CMICmnMIValueConst miValueConst9("all");
+ const CMICmnMIValueResult miValueResult9("stopped-threads", miValueConst9);
+ bOk = miOutOfBandRecord.Add(miValueResult9);
+ bOk = MiOutOfBandRecordToStdout(miOutOfBandRecord);
+ bOk = bOk && TextToStdout("(gdb)");
+ }
+
+ return MIstatus::success;
}
-
+
//++ ------------------------------------------------------------------------------------
-// Details: Asynchronous event handler for LLDB Process stop reason trace.
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
+// Details: Asynchronous event handler for LLDB Process stop reason trace.
+// Type: Method.
+// Args: None.
+// Return: MIstatus::success - Functionality succeeded.
+// MIstatus::failure - Functionality failed.
+// Throws: None.
//--
-bool CMICmnLLDBDebuggerHandleEvents::HandleProcessEventStopReasonTrace( void )
+bool
+CMICmnLLDBDebuggerHandleEvents::HandleProcessEventStopReasonTrace(void)
{
- bool bOk = true;
- lldb::SBProcess & rProcess = CMICmnLLDBDebugSessionInfo::Instance().m_lldbProcess;
- lldb::SBThread thread = rProcess.GetSelectedThread();
- const MIuint nFrame = thread.GetNumFrames();
- if( nFrame == 0 )
- {
- // MI print "*stopped,reason=\"trace\",stopped-threads=\"all\""
- const CMICmnMIValueConst miValueConst( "trace" );
- const CMICmnMIValueResult miValueResult( "reason", miValueConst );
- CMICmnMIOutOfBandRecord miOutOfBandRecord( CMICmnMIOutOfBandRecord::eOutOfBand_Stopped, miValueResult );
- const CMICmnMIValueConst miValueConst2( "all" );
- const CMICmnMIValueResult miValueResult2( "stopped-threads", miValueConst2 );
- bOk = miOutOfBandRecord.Add( miValueResult2 );
- bOk = MiOutOfBandRecordToStdout( miOutOfBandRecord );
- bOk = bOk && TextToStdout( "(gdb)" );
- return bOk;
- }
-
- CMICmnLLDBDebugSessionInfo & rSession = CMICmnLLDBDebugSessionInfo::Instance();
-
- // MI print "*stopped,reason=\"end-stepping-range\",frame={addr=\"0x%08x\",func=\"%s\",args=[\"%s\"],file=\"%s\",fullname=\"%s\",line=\"%d\"},thread-id=\"%d\",stopped-threads=\"all\""
- lldb::SBFrame frame = thread.GetFrameAtIndex( 0 );
- lldb::addr_t pc = 0;
- CMIUtilString fnName;
- CMIUtilString fileName;
- CMIUtilString path;
- MIuint nLine = 0;
- if( !rSession.GetFrameInfo( frame, pc, fnName, fileName, path, nLine ) )
- {
- SetErrorDescription( CMIUtilString::Format( MIRSRC( IDS_LLDBOUTOFBAND_ERR_FRAME_INFO_GET ), "HandleProcessEventStopReasonTrace()" ) );
- return MIstatus::failure;
- }
-
- // Function args
- CMICmnMIValueList miValueList( true );
- const MIuint maskVarTypes = 0x1000;
- if( !rSession.MIResponseFormVariableInfo2( frame, maskVarTypes, miValueList ) )
- return MIstatus::failure;
- CMICmnMIValueTuple miValueTuple;
- if( !rSession.MIResponseFormFrameInfo2( pc, miValueList.GetString(), fnName, fileName, path, nLine, miValueTuple ) )
- return MIstatus::failure;
-
- const CMICmnMIValueConst miValueConst( "end-stepping-range" );
- const CMICmnMIValueResult miValueResult( "reason", miValueConst );
- CMICmnMIOutOfBandRecord miOutOfBandRecord( CMICmnMIOutOfBandRecord::eOutOfBand_Stopped, miValueResult );
- const CMICmnMIValueResult miValueResult2( "frame", miValueTuple );
- bOk = miOutOfBandRecord.Add( miValueResult2 );
-
- // Add to MI thread-id=\"%d\",stopped-threads=\"all\"
- if( bOk )
- {
- const CMIUtilString strThreadId( CMIUtilString::Format( "%d", thread.GetIndexID() ) );
- const CMICmnMIValueConst miValueConst8( strThreadId );
- const CMICmnMIValueResult miValueResult8( "thread-id", miValueConst8 );
- bOk = miOutOfBandRecord.Add( miValueResult8 );
- }
- if( bOk )
- {
- const CMICmnMIValueConst miValueConst9( "all" );
- const CMICmnMIValueResult miValueResult9( "stopped-threads", miValueConst9 );
- bOk = miOutOfBandRecord.Add( miValueResult9 );
- bOk = MiOutOfBandRecordToStdout( miOutOfBandRecord );
- bOk = bOk && TextToStdout( "(gdb)" );
- }
-
- return bOk;
+ bool bOk = true;
+ lldb::SBProcess &rProcess = CMICmnLLDBDebugSessionInfo::Instance().m_lldbProcess;
+ lldb::SBThread thread = rProcess.GetSelectedThread();
+ const MIuint nFrame = thread.GetNumFrames();
+ if (nFrame == 0)
+ {
+ // MI print "*stopped,reason=\"trace\",stopped-threads=\"all\""
+ const CMICmnMIValueConst miValueConst("trace");
+ const CMICmnMIValueResult miValueResult("reason", miValueConst);
+ CMICmnMIOutOfBandRecord miOutOfBandRecord(CMICmnMIOutOfBandRecord::eOutOfBand_Stopped, miValueResult);
+ const CMICmnMIValueConst miValueConst2("all");
+ const CMICmnMIValueResult miValueResult2("stopped-threads", miValueConst2);
+ bOk = miOutOfBandRecord.Add(miValueResult2);
+ bOk = MiOutOfBandRecordToStdout(miOutOfBandRecord);
+ bOk = bOk && TextToStdout("(gdb)");
+ return bOk;
+ }
+
+ CMICmnLLDBDebugSessionInfo &rSession = CMICmnLLDBDebugSessionInfo::Instance();
+
+ // MI print
+ // "*stopped,reason=\"end-stepping-range\",frame={addr=\"0x%08x\",func=\"%s\",args=[\"%s\"],file=\"%s\",fullname=\"%s\",line=\"%d\"},thread-id=\"%d\",stopped-threads=\"all\""
+ lldb::SBFrame frame = thread.GetFrameAtIndex(0);
+ lldb::addr_t pc = 0;
+ CMIUtilString fnName;
+ CMIUtilString fileName;
+ CMIUtilString path;
+ MIuint nLine = 0;
+ if (!rSession.GetFrameInfo(frame, pc, fnName, fileName, path, nLine))
+ {
+ SetErrorDescription(CMIUtilString::Format(MIRSRC(IDS_LLDBOUTOFBAND_ERR_FRAME_INFO_GET), "HandleProcessEventStopReasonTrace()"));
+ return MIstatus::failure;
+ }
+
+ // Function args
+ CMICmnMIValueList miValueList(true);
+ const MIuint maskVarTypes = CMICmnLLDBDebugSessionInfo::eVariableType_Arguments;
+ if (!rSession.MIResponseFormVariableInfo2(frame, maskVarTypes, miValueList))
+ return MIstatus::failure;
+ CMICmnMIValueTuple miValueTuple;
+ if (!rSession.MIResponseFormFrameInfo2(pc, miValueList.GetString(), fnName, fileName, path, nLine, miValueTuple))
+ return MIstatus::failure;
+
+ const CMICmnMIValueConst miValueConst("end-stepping-range");
+ const CMICmnMIValueResult miValueResult("reason", miValueConst);
+ CMICmnMIOutOfBandRecord miOutOfBandRecord(CMICmnMIOutOfBandRecord::eOutOfBand_Stopped, miValueResult);
+ const CMICmnMIValueResult miValueResult2("frame", miValueTuple);
+ bOk = miOutOfBandRecord.Add(miValueResult2);
+
+ // Add to MI thread-id=\"%d\",stopped-threads=\"all\"
+ if (bOk)
+ {
+ const CMIUtilString strThreadId(CMIUtilString::Format("%d", thread.GetIndexID()));
+ const CMICmnMIValueConst miValueConst8(strThreadId);
+ const CMICmnMIValueResult miValueResult8("thread-id", miValueConst8);
+ bOk = miOutOfBandRecord.Add(miValueResult8);
+ }
+ if (bOk)
+ {
+ const CMICmnMIValueConst miValueConst9("all");
+ const CMICmnMIValueResult miValueResult9("stopped-threads", miValueConst9);
+ bOk = miOutOfBandRecord.Add(miValueResult9);
+ bOk = MiOutOfBandRecordToStdout(miOutOfBandRecord);
+ bOk = bOk && TextToStdout("(gdb)");
+ }
+
+ return bOk;
}
//++ ------------------------------------------------------------------------------------
-// Details: Asynchronous function update selected thread.
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
+// Details: Asynchronous function update selected thread.
+// Type: Method.
+// Args: None.
+// Return: MIstatus::success - Functionality succeeded.
+// MIstatus::failure - Functionality failed.
+// Throws: None.
//--
-bool CMICmnLLDBDebuggerHandleEvents::UpdateSelectedThread( void )
+bool
+CMICmnLLDBDebuggerHandleEvents::UpdateSelectedThread(void)
{
- lldb::SBProcess process = CMICmnLLDBDebugSessionInfo::Instance().m_rLldbDebugger.GetSelectedTarget().GetProcess();
- if( !process.IsValid() )
- return MIstatus::success;
-
- lldb::SBThread currentThread = process.GetSelectedThread();
- lldb::SBThread thread;
- const lldb::StopReason eCurrentThreadStoppedReason = currentThread.GetStopReason();
- if( !currentThread.IsValid() || (eCurrentThreadStoppedReason == lldb::eStopReasonInvalid) || (eCurrentThreadStoppedReason == lldb::eStopReasonNone) )
- {
- // Prefer a thread that has just completed its plan over another thread as current thread
- lldb::SBThread planThread;
- lldb::SBThread otherThread;
- const size_t nThread = process.GetNumThreads();
- for( MIuint i = 0; i < nThread; i++ )
- {
- // GetThreadAtIndex() uses a base 0 index
- // GetThreadByIndexID() uses a base 1 index
- thread = process.GetThreadAtIndex( i );
- const lldb::StopReason eThreadStopReason = thread.GetStopReason();
- switch( eThreadStopReason )
- {
+ lldb::SBProcess process = CMICmnLLDBDebugSessionInfo::Instance().m_rLldbDebugger.GetSelectedTarget().GetProcess();
+ if (!process.IsValid())
+ return MIstatus::success;
+
+ lldb::SBThread currentThread = process.GetSelectedThread();
+ lldb::SBThread thread;
+ const lldb::StopReason eCurrentThreadStoppedReason = currentThread.GetStopReason();
+ if (!currentThread.IsValid() || (eCurrentThreadStoppedReason == lldb::eStopReasonInvalid) ||
+ (eCurrentThreadStoppedReason == lldb::eStopReasonNone))
+ {
+ // Prefer a thread that has just completed its plan over another thread as current thread
+ lldb::SBThread planThread;
+ lldb::SBThread otherThread;
+ const size_t nThread = process.GetNumThreads();
+ for (MIuint i = 0; i < nThread; i++)
+ {
+ // GetThreadAtIndex() uses a base 0 index
+ // GetThreadByIndexID() uses a base 1 index
+ thread = process.GetThreadAtIndex(i);
+ const lldb::StopReason eThreadStopReason = thread.GetStopReason();
+ switch (eThreadStopReason)
+ {
case lldb::eStopReasonTrace:
case lldb::eStopReasonBreakpoint:
case lldb::eStopReasonWatchpoint:
case lldb::eStopReasonSignal:
case lldb::eStopReasonException:
- if( !otherThread.IsValid() )
+ if (!otherThread.IsValid())
otherThread = thread;
break;
case lldb::eStopReasonPlanComplete:
- if( !planThread.IsValid() )
+ if (!planThread.IsValid())
planThread = thread;
break;
- case lldb::eStopReasonInvalid:
+ case lldb::eStopReasonInvalid:
case lldb::eStopReasonNone:
default:
break;
- }
- }
- if( planThread.IsValid() )
- process.SetSelectedThread( planThread );
- else if( otherThread.IsValid() )
- process.SetSelectedThread( otherThread );
- else
- {
- if( currentThread.IsValid() )
- thread = currentThread;
- else
- thread = process.GetThreadAtIndex( 0 );
-
- if( thread.IsValid() )
- process.SetSelectedThread( thread );
- }
- } // if( !currentThread.IsValid() || (eCurrentThreadStoppedReason == lldb::eStopReasonInvalid) || (eCurrentThreadStoppedReason == lldb::eStopReasonNone) )
-
- return MIstatus::success;
+ }
+ }
+ if (planThread.IsValid())
+ process.SetSelectedThread(planThread);
+ else if (otherThread.IsValid())
+ process.SetSelectedThread(otherThread);
+ else
+ {
+ if (currentThread.IsValid())
+ thread = currentThread;
+ else
+ thread = process.GetThreadAtIndex(0);
+
+ if (thread.IsValid())
+ process.SetSelectedThread(thread);
+ }
+ } // if( !currentThread.IsValid() || (eCurrentThreadStoppedReason == lldb::eStopReasonInvalid) || (eCurrentThreadStoppedReason ==
+ // lldb::eStopReasonNone) )
+
+ return MIstatus::success;
}
//++ ------------------------------------------------------------------------------------
-// Details: Print to stdout "*running,thread-id=\"all\"", "(gdb)".
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
+// Details: Print to stdout "*running,thread-id=\"all\"", "(gdb)".
+// Type: Method.
+// Args: None.
+// Return: MIstatus::success - Functionality succeeded.
+// MIstatus::failure - Functionality failed.
+// Throws: None.
//--
-bool CMICmnLLDBDebuggerHandleEvents::HandleProcessEventStateRunning( void )
+bool
+CMICmnLLDBDebuggerHandleEvents::HandleProcessEventStateRunning(void)
{
- CMICmnMIValueConst miValueConst( "all" );
- CMICmnMIValueResult miValueResult( "thread-id", miValueConst );
- CMICmnMIOutOfBandRecord miOutOfBandRecord( CMICmnMIOutOfBandRecord::eOutOfBand_Running, miValueResult );
- bool bOk = MiOutOfBandRecordToStdout( miOutOfBandRecord );
- bOk = bOk && TextToStdout( "(gdb)" );
+ CMICmnMIValueConst miValueConst("all");
+ CMICmnMIValueResult miValueResult("thread-id", miValueConst);
+ CMICmnMIOutOfBandRecord miOutOfBandRecord(CMICmnMIOutOfBandRecord::eOutOfBand_Running, miValueResult);
+ bool bOk = MiOutOfBandRecordToStdout(miOutOfBandRecord);
+ bOk = bOk && TextToStdout("(gdb)");
- return bOk;
+ return bOk;
}
//++ ------------------------------------------------------------------------------------
-// Details: Print to stdout "=thread-exited,id=\"%ld\",group-id=\"i1\"",
-// "=thread-group-exited,id=\"i1\",exit-code=\"0\""),
-// "*stopped,reason=\"exited-normally\"",
-// "(gdb)"
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
+// Details: Print to stdout "=thread-exited,id=\"%ld\",group-id=\"i1\"",
+// "=thread-group-exited,id=\"i1\",exit-code=\"0\""),
+// "*stopped,reason=\"exited-normally\"",
+// "(gdb)"
+// Type: Method.
+// Args: None.
+// Return: MIstatus::success - Functionality succeeded.
+// MIstatus::failure - Functionality failed.
+// Throws: None.
//--
-bool CMICmnLLDBDebuggerHandleEvents::HandleProcessEventStateExited( void )
+bool
+CMICmnLLDBDebuggerHandleEvents::HandleProcessEventStateExited(void)
{
- const CMIUtilString strId( CMIUtilString::Format( "%ld", 1 ) );
- CMICmnMIValueConst miValueConst( strId );
- CMICmnMIValueResult miValueResult( "id", miValueConst );
- CMICmnMIOutOfBandRecord miOutOfBandRecord( CMICmnMIOutOfBandRecord::eOutOfBand_ThreadExited, miValueResult );
- CMICmnMIValueConst miValueConst2( "i1" );
- CMICmnMIValueResult miValueResult2( "group-id", miValueConst2 );
- bool bOk = miOutOfBandRecord.Add( miValueResult2 );
- bOk = bOk && MiOutOfBandRecordToStdout( miOutOfBandRecord );
- if( bOk )
- {
- CMICmnMIValueConst miValueConst3( "i1" );
- CMICmnMIValueResult miValueResult3( "id", miValueConst3 );
- CMICmnMIOutOfBandRecord miOutOfBandRecord2( CMICmnMIOutOfBandRecord::eOutOfBand_ThreadGroupExited, miValueResult3 );
- CMICmnMIValueConst miValueConst2( "0" );
- CMICmnMIValueResult miValueResult2( "exit-code", miValueConst2 );
- bOk = miOutOfBandRecord2.Add( miValueResult2 );
- bOk = bOk && MiOutOfBandRecordToStdout( miOutOfBandRecord2 );
- }
- if( bOk )
- {
- CMICmnMIValueConst miValueConst4( "exited-normally" );
- CMICmnMIValueResult miValueResult4( "reason", miValueConst4 );
- CMICmnMIOutOfBandRecord miOutOfBandRecord3( CMICmnMIOutOfBandRecord::eOutOfBand_Stopped, miValueResult4 );
- bOk = MiOutOfBandRecordToStdout( miOutOfBandRecord3 );
- }
- bOk = bOk && TextToStdout( "(gdb)" );
-
- return bOk;
+ const CMIUtilString strId(CMIUtilString::Format("%ld", 1));
+ CMICmnMIValueConst miValueConst(strId);
+ CMICmnMIValueResult miValueResult("id", miValueConst);
+ CMICmnMIOutOfBandRecord miOutOfBandRecord(CMICmnMIOutOfBandRecord::eOutOfBand_ThreadExited, miValueResult);
+ CMICmnMIValueConst miValueConst2("i1");
+ CMICmnMIValueResult miValueResult2("group-id", miValueConst2);
+ bool bOk = miOutOfBandRecord.Add(miValueResult2);
+ bOk = bOk && MiOutOfBandRecordToStdout(miOutOfBandRecord);
+ if (bOk)
+ {
+ CMICmnMIValueConst miValueConst3("i1");
+ CMICmnMIValueResult miValueResult3("id", miValueConst3);
+ CMICmnMIOutOfBandRecord miOutOfBandRecord2(CMICmnMIOutOfBandRecord::eOutOfBand_ThreadGroupExited, miValueResult3);
+ CMICmnMIValueConst miValueConst2("0");
+ CMICmnMIValueResult miValueResult2("exit-code", miValueConst2);
+ bOk = miOutOfBandRecord2.Add(miValueResult2);
+ bOk = bOk && MiOutOfBandRecordToStdout(miOutOfBandRecord2);
+ }
+ if (bOk)
+ {
+ CMICmnMIValueConst miValueConst4("exited-normally");
+ CMICmnMIValueResult miValueResult4("reason", miValueConst4);
+ CMICmnMIOutOfBandRecord miOutOfBandRecord3(CMICmnMIOutOfBandRecord::eOutOfBand_Stopped, miValueResult4);
+ bOk = MiOutOfBandRecordToStdout(miOutOfBandRecord3);
+ }
+ bOk = bOk && TextToStdout("(gdb)");
+
+ return bOk;
}
//++ ------------------------------------------------------------------------------------
-// Details: Drain all stdout so we don't see any output come after we print our prompts.
-// The process has stuff waiting for stdout; get it and write it out to the
-// appropriate place.
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
+// Details: Drain all stdout so we don't see any output come after we print our prompts.
+// The process has stuff waiting for stdout; get it and write it out to the
+// appropriate place.
+// Type: Method.
+// Args: None.
+// Return: MIstatus::success - Functionality succeeded.
+// MIstatus::failure - Functionality failed.
+// Throws: None.
//--
-bool CMICmnLLDBDebuggerHandleEvents::GetProcessStdout( void )
+bool
+CMICmnLLDBDebuggerHandleEvents::GetProcessStdout(void)
{
- bool bOk = MIstatus::success;
-
- char c;
- size_t nBytes = 0;
- CMIUtilString text;
- lldb::SBProcess process = CMICmnLLDBDebugSessionInfo::Instance().m_rLldbDebugger.GetSelectedTarget().GetProcess();
- while( process.GetSTDOUT( &c, 1 ) > 0 )
- {
- CMIUtilString str;
- if( ConvertPrintfCtrlCodeToString( c, str ) )
- text += str;
- nBytes++;
- }
- if( nBytes > 0 )
- {
- const CMIUtilString t( CMIUtilString::Format( "~\"%s\"", text.c_str() ) );
- bOk = TextToStdout( t );
- }
-
- return bOk;
+ bool bOk = MIstatus::success;
+
+ char c;
+ size_t nBytes = 0;
+ CMIUtilString text;
+ lldb::SBProcess process = CMICmnLLDBDebugSessionInfo::Instance().m_rLldbDebugger.GetSelectedTarget().GetProcess();
+ while (process.GetSTDOUT(&c, 1) > 0)
+ {
+ CMIUtilString str;
+ if (ConvertPrintfCtrlCodeToString(c, str))
+ text += str;
+ nBytes++;
+ }
+ if (nBytes > 0)
+ {
+ const CMIUtilString t(CMIUtilString::Format("~\"%s\"", text.c_str()));
+ bOk = TextToStdout(t);
+ }
+
+ return bOk;
}
//++ ------------------------------------------------------------------------------------
-// Details: Drain all stderr so we don't see any output come after we print our prompts.
-// The process has stuff waiting for stderr; get it and write it out to the
-// appropriate place.
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
+// Details: Drain all stderr so we don't see any output come after we print our prompts.
+// The process has stuff waiting for stderr; get it and write it out to the
+// appropriate place.
+// Type: Method.
+// Args: None.
+// Return: MIstatus::success - Functionality succeeded.
+// MIstatus::failure - Functionality failed.
+// Throws: None.
//--
-bool CMICmnLLDBDebuggerHandleEvents::GetProcessStderr( void )
+bool
+CMICmnLLDBDebuggerHandleEvents::GetProcessStderr(void)
{
- bool bOk = MIstatus::success;
-
- char c;
- size_t nBytes = 0;
- CMIUtilString text;
- lldb::SBProcess process = CMICmnLLDBDebugSessionInfo::Instance().m_rLldbDebugger.GetSelectedTarget().GetProcess();
- while( process.GetSTDERR( &c, 1 ) > 0 )
- {
- CMIUtilString str;
- if( ConvertPrintfCtrlCodeToString( c, str ) )
- text += str;
- nBytes++;
- }
- if( nBytes > 0 )
- {
- const CMIUtilString t( CMIUtilString::Format( "~\"%s\"", text.c_str() ) );
- bOk = TextToStdout( t );
- }
-
- return bOk;
+ bool bOk = MIstatus::success;
+
+ char c;
+ size_t nBytes = 0;
+ CMIUtilString text;
+ lldb::SBProcess process = CMICmnLLDBDebugSessionInfo::Instance().m_rLldbDebugger.GetSelectedTarget().GetProcess();
+ while (process.GetSTDERR(&c, 1) > 0)
+ {
+ CMIUtilString str;
+ if (ConvertPrintfCtrlCodeToString(c, str))
+ text += str;
+ nBytes++;
+ }
+ if (nBytes > 0)
+ {
+ const CMIUtilString t(CMIUtilString::Format("~\"%s\"", text.c_str()));
+ bOk = TextToStdout(t);
+ }
+
+ return bOk;
}
-
+
//++ ------------------------------------------------------------------------------------
-// Details: Convert text stream control codes to text equivalent.
-// Type: Method.
-// Args: vCtrl - (R) The control code.
-// vwrStrEquivalent - (W) The text equivalent.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
+// Details: Convert text stream control codes to text equivalent.
+// Type: Method.
+// Args: vCtrl - (R) The control code.
+// vwrStrEquivalent - (W) The text equivalent.
+// Return: MIstatus::success - Functionality succeeded.
+// MIstatus::failure - Functionality failed.
+// Throws: None.
//--
-bool CMICmnLLDBDebuggerHandleEvents::ConvertPrintfCtrlCodeToString( const MIchar vCtrl, CMIUtilString & vwrStrEquivalent )
+bool
+CMICmnLLDBDebuggerHandleEvents::ConvertPrintfCtrlCodeToString(const MIchar vCtrl, CMIUtilString &vwrStrEquivalent)
{
- switch( vCtrl )
- {
- case '\033': vwrStrEquivalent = "\\e"; break;
- case '\a': vwrStrEquivalent = "\\a"; break;
- case '\b': vwrStrEquivalent = "\\b"; break;
- case '\f': vwrStrEquivalent = "\\f"; break;
- case '\n': vwrStrEquivalent = "\\n"; break;
- case '\r': vwrStrEquivalent = "\\r"; break;
- case '\t': vwrStrEquivalent = "\\t"; break;
- case '\v': vwrStrEquivalent = "\\v"; break;
- default:
- vwrStrEquivalent = CMIUtilString::Format( "%c", vCtrl );
- break;
- }
-
- return MIstatus::success;
+ switch (vCtrl)
+ {
+ case '\033':
+ vwrStrEquivalent = "\\e";
+ break;
+ case '\a':
+ vwrStrEquivalent = "\\a";
+ break;
+ case '\b':
+ vwrStrEquivalent = "\\b";
+ break;
+ case '\f':
+ vwrStrEquivalent = "\\f";
+ break;
+ case '\n':
+ vwrStrEquivalent = "\\n";
+ break;
+ case '\r':
+ vwrStrEquivalent = "\\r";
+ break;
+ case '\t':
+ vwrStrEquivalent = "\\t";
+ break;
+ case '\v':
+ vwrStrEquivalent = "\\v";
+ break;
+ default:
+ vwrStrEquivalent = CMIUtilString::Format("%c", vCtrl);
+ break;
+ }
+
+ return MIstatus::success;
}
//++ ------------------------------------------------------------------------------------
-// Details: Asynchronous event function check for state changes.
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
+// Details: Asynchronous event function check for state changes.
+// Type: Method.
+// Args: None.
+// Return: MIstatus::success - Functionality succeeded.
+// MIstatus::failure - Functionality failed.
+// Throws: None.
//--
-bool CMICmnLLDBDebuggerHandleEvents::ChkForStateChanges( void )
+bool
+CMICmnLLDBDebuggerHandleEvents::ChkForStateChanges(void)
{
- lldb::SBProcess & rProcess = CMICmnLLDBDebugSessionInfo::Instance().m_lldbProcess;
- if( !rProcess.IsValid() )
- return MIstatus::success;
- lldb::SBTarget & rTarget = CMICmnLLDBDebugSessionInfo::Instance().m_lldbTarget;
- if( !rTarget.IsValid() )
- return MIstatus::success;
+ lldb::SBProcess &rProcess = CMICmnLLDBDebugSessionInfo::Instance().m_lldbProcess;
+ if (!rProcess.IsValid())
+ return MIstatus::success;
+ lldb::SBTarget &rTarget = CMICmnLLDBDebugSessionInfo::Instance().m_lldbTarget;
+ if (!rTarget.IsValid())
+ return MIstatus::success;
- bool bOk = MIstatus::success;
+ bool bOk = MIstatus::success;
- // Check for created threads
+ // Check for created threads
const MIuint nThread = rProcess.GetNumThreads();
- for( MIuint i = 0; i < nThread; i++ )
- {
- // GetThreadAtIndex() uses a base 0 index
- // GetThreadByIndexID() uses a base 1 index
- lldb::SBThread thread = rProcess.GetThreadAtIndex( i );
- if( !thread.IsValid() )
- continue;
-
- CMICmnLLDBDebugSessionInfo::VecActiveThreadId_t::const_iterator it = CMICmnLLDBDebugSessionInfo::Instance().m_vecActiveThreadId.begin();
- bool bFound = false;
- while( it != CMICmnLLDBDebugSessionInfo::Instance().m_vecActiveThreadId.end() )
- {
- const MIuint nThreadId = *it;
- if( nThreadId == i )
- {
- bFound = true;
- break;
- }
-
- // Next
- ++it;
- }
- if( !bFound )
- {
- CMICmnLLDBDebugSessionInfo::Instance().m_vecActiveThreadId.push_back( i );
-
- // Form MI "=thread-created,id=\"%d\",group-id=\"i1\""
- const CMIUtilString strValue( CMIUtilString::Format( "%d", thread.GetIndexID() ) );
- const CMICmnMIValueConst miValueConst( strValue );
- const CMICmnMIValueResult miValueResult( "id", miValueConst );
- CMICmnMIOutOfBandRecord miOutOfBand( CMICmnMIOutOfBandRecord::eOutOfBand_ThreadCreated, miValueResult );
- const CMICmnMIValueConst miValueConst2( "i1" );
- const CMICmnMIValueResult miValueResult2( "group-id", miValueConst2 );
- bOk = miOutOfBand.Add( miValueResult2 );
- bOk = bOk && MiOutOfBandRecordToStdout( miOutOfBand );
- if( !bOk )
- return MIstatus::failure;
- }
- }
-
- lldb::SBThread currentThread = rProcess.GetSelectedThread();
- if( currentThread.IsValid() )
- {
- const MIuint threadId = currentThread.GetIndexID();
- if( CMICmnLLDBDebugSessionInfo::Instance().m_currentSelectedThread != threadId )
- {
- CMICmnLLDBDebugSessionInfo::Instance().m_currentSelectedThread = threadId;
-
- // Form MI "=thread-selected,id=\"%d\""
- const CMIUtilString strValue( CMIUtilString::Format( "%d", currentThread.GetIndexID() ) );
- const CMICmnMIValueConst miValueConst( strValue );
- const CMICmnMIValueResult miValueResult( "id", miValueConst );
- CMICmnMIOutOfBandRecord miOutOfBand( CMICmnMIOutOfBandRecord::eOutOfBand_ThreadSelected, miValueResult );
- if( !MiOutOfBandRecordToStdout( miOutOfBand ) )
- return MIstatus::failure;
- }
- }
-
- // Check for invalid (removed) threads
- CMICmnLLDBDebugSessionInfo::VecActiveThreadId_t::const_iterator it = CMICmnLLDBDebugSessionInfo::Instance().m_vecActiveThreadId.begin();
- while( it != CMICmnLLDBDebugSessionInfo::Instance().m_vecActiveThreadId.end() )
- {
- const MIuint nThreadId = *it;
- lldb::SBThread thread = rProcess.GetThreadAtIndex( nThreadId );
- if( !thread.IsValid() )
- {
- // Form MI "=thread-exited,id=\"%ld\",group-id=\"i1\""
- const CMIUtilString strValue( CMIUtilString::Format( "%ld", thread.GetIndexID() ) );
- const CMICmnMIValueConst miValueConst( strValue );
- const CMICmnMIValueResult miValueResult( "id", miValueConst );
- CMICmnMIOutOfBandRecord miOutOfBand( CMICmnMIOutOfBandRecord::eOutOfBand_ThreadExited, miValueResult );
- const CMICmnMIValueConst miValueConst2( "i1" );
- const CMICmnMIValueResult miValueResult2( "group-id", miValueConst2 );
- bOk = miOutOfBand.Add( miValueResult2 );
- bOk = bOk && MiOutOfBandRecordToStdout( miOutOfBand );
- if( !bOk )
- return MIstatus::failure;
- }
-
- // Next
- ++it;
- }
-
- return TextToStdout( "(gdb)" );
+ for (MIuint i = 0; i < nThread; i++)
+ {
+ // GetThreadAtIndex() uses a base 0 index
+ // GetThreadByIndexID() uses a base 1 index
+ lldb::SBThread thread = rProcess.GetThreadAtIndex(i);
+ if (!thread.IsValid())
+ continue;
+
+ CMICmnLLDBDebugSessionInfo::VecActiveThreadId_t::const_iterator it =
+ CMICmnLLDBDebugSessionInfo::Instance().m_vecActiveThreadId.begin();
+ bool bFound = false;
+ while (it != CMICmnLLDBDebugSessionInfo::Instance().m_vecActiveThreadId.end())
+ {
+ const MIuint nThreadId = *it;
+ if (nThreadId == i)
+ {
+ bFound = true;
+ break;
+ }
+
+ // Next
+ ++it;
+ }
+ if (!bFound)
+ {
+ CMICmnLLDBDebugSessionInfo::Instance().m_vecActiveThreadId.push_back(i);
+
+ // Form MI "=thread-created,id=\"%d\",group-id=\"i1\""
+ const CMIUtilString strValue(CMIUtilString::Format("%d", thread.GetIndexID()));
+ const CMICmnMIValueConst miValueConst(strValue);
+ const CMICmnMIValueResult miValueResult("id", miValueConst);
+ CMICmnMIOutOfBandRecord miOutOfBand(CMICmnMIOutOfBandRecord::eOutOfBand_ThreadCreated, miValueResult);
+ const CMICmnMIValueConst miValueConst2("i1");
+ const CMICmnMIValueResult miValueResult2("group-id", miValueConst2);
+ bOk = miOutOfBand.Add(miValueResult2);
+ bOk = bOk && MiOutOfBandRecordToStdout(miOutOfBand);
+ if (!bOk)
+ return MIstatus::failure;
+ }
+ }
+
+ lldb::SBThread currentThread = rProcess.GetSelectedThread();
+ if (currentThread.IsValid())
+ {
+ const MIuint threadId = currentThread.GetIndexID();
+ if (CMICmnLLDBDebugSessionInfo::Instance().m_currentSelectedThread != threadId)
+ {
+ CMICmnLLDBDebugSessionInfo::Instance().m_currentSelectedThread = threadId;
+
+ // Form MI "=thread-selected,id=\"%d\""
+ const CMIUtilString strValue(CMIUtilString::Format("%d", currentThread.GetIndexID()));
+ const CMICmnMIValueConst miValueConst(strValue);
+ const CMICmnMIValueResult miValueResult("id", miValueConst);
+ CMICmnMIOutOfBandRecord miOutOfBand(CMICmnMIOutOfBandRecord::eOutOfBand_ThreadSelected, miValueResult);
+ if (!MiOutOfBandRecordToStdout(miOutOfBand))
+ return MIstatus::failure;
+ }
+ }
+
+ // Check for invalid (removed) threads
+ CMICmnLLDBDebugSessionInfo::VecActiveThreadId_t::const_iterator it = CMICmnLLDBDebugSessionInfo::Instance().m_vecActiveThreadId.begin();
+ while (it != CMICmnLLDBDebugSessionInfo::Instance().m_vecActiveThreadId.end())
+ {
+ const MIuint nThreadId = *it;
+ lldb::SBThread thread = rProcess.GetThreadAtIndex(nThreadId);
+ if (!thread.IsValid())
+ {
+ // Form MI "=thread-exited,id=\"%ld\",group-id=\"i1\""
+ const CMIUtilString strValue(CMIUtilString::Format("%ld", thread.GetIndexID()));
+ const CMICmnMIValueConst miValueConst(strValue);
+ const CMICmnMIValueResult miValueResult("id", miValueConst);
+ CMICmnMIOutOfBandRecord miOutOfBand(CMICmnMIOutOfBandRecord::eOutOfBand_ThreadExited, miValueResult);
+ const CMICmnMIValueConst miValueConst2("i1");
+ const CMICmnMIValueResult miValueResult2("group-id", miValueConst2);
+ bOk = miOutOfBand.Add(miValueResult2);
+ bOk = bOk && MiOutOfBandRecordToStdout(miOutOfBand);
+ if (!bOk)
+ return MIstatus::failure;
+ }
+
+ // Next
+ ++it;
+ }
+
+ return TextToStdout("(gdb)");
}
//++ ------------------------------------------------------------------------------------
-// Details: Take a fully formed MI result record and send to the stdout stream.
-// Also output to the MI Log file.
-// Type: Method.
-// Args: vrMiResultRecord - (R) MI result record object.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
+// Details: Take a fully formed MI result record and send to the stdout stream.
+// Also output to the MI Log file.
+// Type: Method.
+// Args: vrMiResultRecord - (R) MI result record object.
+// Return: MIstatus::success - Functionality succeeded.
+// MIstatus::failure - Functionality failed.
+// Throws: None.
//--
-bool CMICmnLLDBDebuggerHandleEvents::MiResultRecordToStdout( const CMICmnMIResultRecord & vrMiResultRecord )
+bool
+CMICmnLLDBDebuggerHandleEvents::MiResultRecordToStdout(const CMICmnMIResultRecord &vrMiResultRecord)
{
- return TextToStdout( vrMiResultRecord.GetString() );
+ return TextToStdout(vrMiResultRecord.GetString());
}
//++ ------------------------------------------------------------------------------------
-// Details: Take a fully formed MI Out-of-band record and send to the stdout stream.
-// Also output to the MI Log file.
-// Type: Method.
-// Args: vrMiOutOfBandRecord - (R) MI Out-of-band record object.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
+// Details: Take a fully formed MI Out-of-band record and send to the stdout stream.
+// Also output to the MI Log file.
+// Type: Method.
+// Args: vrMiOutOfBandRecord - (R) MI Out-of-band record object.
+// Return: MIstatus::success - Functionality succeeded.
+// MIstatus::failure - Functionality failed.
+// Throws: None.
//--
-bool CMICmnLLDBDebuggerHandleEvents::MiOutOfBandRecordToStdout( const CMICmnMIOutOfBandRecord & vrMiOutOfBandRecord )
+bool
+CMICmnLLDBDebuggerHandleEvents::MiOutOfBandRecordToStdout(const CMICmnMIOutOfBandRecord &vrMiOutOfBandRecord)
{
- return TextToStdout( vrMiOutOfBandRecord.GetString() );
+ return TextToStdout(vrMiOutOfBandRecord.GetString());
}
//++ ------------------------------------------------------------------------------------
-// Details: Take a text data and send to the stdout stream. Also output to the MI Log
-// file.
-// Type: Method.
-// Args: vrTxt - (R) Text.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
+// Details: Take a text data and send to the stdout stream. Also output to the MI Log
+// file.
+// Type: Method.
+// Args: vrTxt - (R) Text.
+// Return: MIstatus::success - Functionality succeeded.
+// MIstatus::failure - Functionality failed.
+// Throws: None.
//--
-bool CMICmnLLDBDebuggerHandleEvents::TextToStdout( const CMIUtilString & vrTxt )
+bool
+CMICmnLLDBDebuggerHandleEvents::TextToStdout(const CMIUtilString &vrTxt)
{
- return CMICmnStreamStdout::TextToStdout( vrTxt );
+ return CMICmnStreamStdout::TextToStdout(vrTxt);
}
//++ ------------------------------------------------------------------------------------
-// Details: Take a text data and send to the stderr stream. Also output to the MI Log
-// file.
-// Type: Method.
-// Args: vrTxt - (R) Text.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
+// Details: Take a text data and send to the stderr stream. Also output to the MI Log
+// file.
+// Type: Method.
+// Args: vrTxt - (R) Text.
+// Return: MIstatus::success - Functionality succeeded.
+// MIstatus::failure - Functionality failed.
+// Throws: None.
//--
-bool CMICmnLLDBDebuggerHandleEvents::TextToStderr( const CMIUtilString & vrTxt )
+bool
+CMICmnLLDBDebuggerHandleEvents::TextToStderr(const CMIUtilString &vrTxt)
{
- return CMICmnStreamStderr::TextToStderr( vrTxt );
+ return CMICmnStreamStderr::TextToStderr(vrTxt);
}