aboutsummaryrefslogtreecommitdiff
path: root/tools/lldb-mi/MIDriver.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/lldb-mi/MIDriver.cpp')
-rw-r--r--tools/lldb-mi/MIDriver.cpp1923
1 files changed, 988 insertions, 935 deletions
diff --git a/tools/lldb-mi/MIDriver.cpp b/tools/lldb-mi/MIDriver.cpp
index 759d54a5364d..accde1c7cde7 100644
--- a/tools/lldb-mi/MIDriver.cpp
+++ b/tools/lldb-mi/MIDriver.cpp
@@ -8,19 +8,19 @@
//===----------------------------------------------------------------------===//
//++
-// File: MIDriver.cpp
+// File: MIDriver.cpp
//
-// Overview: CMIDriver implementation.
+// Overview: CMIDriver 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:
-#include <stdarg.h> // va_list, va_start, var_end
+#include <stdarg.h> // va_list, va_start, var_end
#include <iostream>
#include <lldb/API/SBError.h>
@@ -44,1233 +44,1286 @@
// Instantiations:
#if _DEBUG
- const CMIUtilString CMIDriver::ms_constMIVersion = MIRSRC( IDS_MI_VERSION_DESCRIPTION_DEBUG );
+const CMIUtilString CMIDriver::ms_constMIVersion = MIRSRC(IDS_MI_VERSION_DESCRIPTION_DEBUG);
#else
- const CMIUtilString CMIDriver::ms_constMIVersion = MIRSRC( IDS_MI_VERSION_DESCRIPTION ); // Matches version in resources file
+const CMIUtilString CMIDriver::ms_constMIVersion = MIRSRC(IDS_MI_VERSION_DESCRIPTION); // Matches version in resources file
#endif // _DEBUG
-const CMIUtilString CMIDriver::ms_constAppNameShort( MIRSRC( IDS_MI_APPNAME_SHORT ) );
-const CMIUtilString CMIDriver::ms_constAppNameLong( MIRSRC( IDS_MI_APPNAME_LONG ) );
+const CMIUtilString CMIDriver::ms_constAppNameShort(MIRSRC(IDS_MI_APPNAME_SHORT));
+const CMIUtilString CMIDriver::ms_constAppNameLong(MIRSRC(IDS_MI_APPNAME_LONG));
//++ ------------------------------------------------------------------------------------
-// Details: CMIDriver constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
+// Details: CMIDriver constructor.
+// Type: Method.
+// Args: None.
+// Return: None.
+// Throws: None.
//--
-CMIDriver::CMIDriver( void )
-: m_bFallThruToOtherDriverEnabled( false )
-, m_bDriverIsExiting( false )
-, m_handleMainThread( 0 )
-, m_rStdin( CMICmnStreamStdin::Instance() )
-, m_rLldbDebugger( CMICmnLLDBDebugger::Instance() )
-, m_rStdOut( CMICmnStreamStdout::Instance() )
-, m_eCurrentDriverState( eDriverState_NotRunning )
-, m_bHaveExecutableFileNamePathOnCmdLine( false )
-, m_bDriverDebuggingArgExecutable( false )
+CMIDriver::CMIDriver(void)
+ : m_bFallThruToOtherDriverEnabled(false)
+ , m_bDriverIsExiting(false)
+ , m_handleMainThread(0)
+ , m_rStdin(CMICmnStreamStdin::Instance())
+ , m_rLldbDebugger(CMICmnLLDBDebugger::Instance())
+ , m_rStdOut(CMICmnStreamStdout::Instance())
+ , m_eCurrentDriverState(eDriverState_NotRunning)
+ , m_bHaveExecutableFileNamePathOnCmdLine(false)
+ , m_bDriverDebuggingArgExecutable(false)
{
}
//++ ------------------------------------------------------------------------------------
-// Details: CMIDriver destructor.
-// Type: Overridden.
-// Args: None.
-// Return: None.
-// Throws: None.
+// Details: CMIDriver destructor.
+// Type: Overridden.
+// Args: None.
+// Return: None.
+// Throws: None.
//--
-CMIDriver::~CMIDriver( void )
+CMIDriver::~CMIDriver(void)
{
}
//++ ------------------------------------------------------------------------------------
-// Details: Set whether *this driver (the parent) is enabled to pass a command to its
-// fall through (child) driver to interpret the command and do work instead
-// (if *this driver decides it can't hanled the command).
-// Type: Method.
-// Args: vbYes - (R) True = yes fall through, false = do not pass on command.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
+// Details: Set whether *this driver (the parent) is enabled to pass a command to its
+// fall through (child) driver to interpret the command and do work instead
+// (if *this driver decides it can't hanled the command).
+// Type: Method.
+// Args: vbYes - (R) True = yes fall through, false = do not pass on command.
+// Return: MIstatus::success - Functional succeeded.
+// MIstatus::failure - Functional failed.
+// Throws: None.
//--
-bool CMIDriver::SetEnableFallThru( const bool vbYes )
+bool
+CMIDriver::SetEnableFallThru(const bool vbYes)
{
- m_bFallThruToOtherDriverEnabled = vbYes;
- return MIstatus::success;
+ m_bFallThruToOtherDriverEnabled = vbYes;
+ return MIstatus::success;
}
//++ ------------------------------------------------------------------------------------
-// Details: Get whether *this driver (the parent) is enabled to pass a command to its
-// fall through (child) driver to interpret the command and do work instead
-// (if *this driver decides it can't hanled the command).
-// Type: Method.
-// Args: None.
-// Return: bool - True = yes fall through, false = do not pass on command.
-// Throws: None.
+// Details: Get whether *this driver (the parent) is enabled to pass a command to its
+// fall through (child) driver to interpret the command and do work instead
+// (if *this driver decides it can't hanled the command).
+// Type: Method.
+// Args: None.
+// Return: bool - True = yes fall through, false = do not pass on command.
+// Throws: None.
//--
-bool CMIDriver::GetEnableFallThru( void ) const
+bool
+CMIDriver::GetEnableFallThru(void) const
{
- return m_bFallThruToOtherDriverEnabled;
+ return m_bFallThruToOtherDriverEnabled;
}
//++ ------------------------------------------------------------------------------------
-// Details: Retrieve MI's application name of itself.
-// Type: Method.
-// Args: None.
-// Return: CMIUtilString & - Text description.
-// Throws: None.
+// Details: Retrieve MI's application name of itself.
+// Type: Method.
+// Args: None.
+// Return: CMIUtilString & - Text description.
+// Throws: None.
//--
-const CMIUtilString & CMIDriver::GetAppNameShort( void ) const
+const CMIUtilString &
+CMIDriver::GetAppNameShort(void) const
{
- return ms_constAppNameShort;
+ return ms_constAppNameShort;
}
//++ ------------------------------------------------------------------------------------
-// Details: Retrieve MI's application name of itself.
-// Type: Method.
-// Args: None.
-// Return: CMIUtilString & - Text description.
-// Throws: None.
+// Details: Retrieve MI's application name of itself.
+// Type: Method.
+// Args: None.
+// Return: CMIUtilString & - Text description.
+// Throws: None.
//--
-const CMIUtilString & CMIDriver::GetAppNameLong( void ) const
+const CMIUtilString &
+CMIDriver::GetAppNameLong(void) const
{
- return ms_constAppNameLong;
+ return ms_constAppNameLong;
}
//++ ------------------------------------------------------------------------------------
-// Details: Retrieve MI's version description of itself.
-// Type: Method.
-// Args: None.
-// Return: CMIUtilString & - Text description.
-// Throws: None.
+// Details: Retrieve MI's version description of itself.
+// Type: Method.
+// Args: None.
+// Return: CMIUtilString & - Text description.
+// Throws: None.
//--
-const CMIUtilString & CMIDriver::GetVersionDescription( void ) const
+const CMIUtilString &
+CMIDriver::GetVersionDescription(void) const
{
- return ms_constMIVersion;
+ return ms_constMIVersion;
}
//++ ------------------------------------------------------------------------------------
-// Details: Initialize setup *this driver ready for use.
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
+// Details: Initialize setup *this driver ready for use.
+// Type: Method.
+// Args: None.
+// Return: MIstatus::success - Functional succeeded.
+// MIstatus::failure - Functional failed.
+// Throws: None.
//--
-bool CMIDriver::Initialize( void )
+bool
+CMIDriver::Initialize(void)
{
- m_eCurrentDriverState = eDriverState_Initialising;
- m_clientUsageRefCnt++;
+ m_eCurrentDriverState = eDriverState_Initialising;
+ m_clientUsageRefCnt++;
- ClrErrorDescription();
+ ClrErrorDescription();
- if( m_bInitialized )
- return MIstatus::success;
+ if (m_bInitialized)
+ return MIstatus::success;
- bool bOk = MIstatus::success;
- CMIUtilString errMsg;
+ bool bOk = MIstatus::success;
+ CMIUtilString errMsg;
- // Initialize all of the modules we depend on
- MI::ModuleInit< CMICmnLog > ( IDS_MI_INIT_ERR_LOG , bOk, errMsg );
- MI::ModuleInit< CMICmnStreamStdout >( IDS_MI_INIT_ERR_STREAMSTDOUT , bOk, errMsg );
- MI::ModuleInit< CMICmnStreamStderr >( IDS_MI_INIT_ERR_STREAMSTDERR , bOk, errMsg );
- MI::ModuleInit< CMICmnResources > ( IDS_MI_INIT_ERR_RESOURCES , bOk, errMsg );
- MI::ModuleInit< CMICmnThreadMgrStd >( IDS_MI_INIT_ERR_THREADMANAGER, bOk, errMsg );
- MI::ModuleInit< CMICmnStreamStdin > ( IDS_MI_INIT_ERR_STREAMSTDIN , bOk, errMsg );
- MI::ModuleInit< CMICmdMgr > ( IDS_MI_INIT_ERR_CMDMGR , bOk, errMsg );
- bOk &= m_rLldbDebugger.SetDriver( *this );
- MI::ModuleInit< CMICmnLLDBDebugger >( IDS_MI_INIT_ERR_LLDBDEBUGGER , bOk, errMsg );
+ // Initialize all of the modules we depend on
+ MI::ModuleInit<CMICmnLog>(IDS_MI_INIT_ERR_LOG, bOk, errMsg);
+ MI::ModuleInit<CMICmnStreamStdout>(IDS_MI_INIT_ERR_STREAMSTDOUT, bOk, errMsg);
+ MI::ModuleInit<CMICmnStreamStderr>(IDS_MI_INIT_ERR_STREAMSTDERR, bOk, errMsg);
+ MI::ModuleInit<CMICmnResources>(IDS_MI_INIT_ERR_RESOURCES, bOk, errMsg);
+ MI::ModuleInit<CMICmnThreadMgrStd>(IDS_MI_INIT_ERR_THREADMANAGER, bOk, errMsg);
+ MI::ModuleInit<CMICmnStreamStdin>(IDS_MI_INIT_ERR_STREAMSTDIN, bOk, errMsg);
+ MI::ModuleInit<CMICmdMgr>(IDS_MI_INIT_ERR_CMDMGR, bOk, errMsg);
+ bOk &= m_rLldbDebugger.SetDriver(*this);
+ MI::ModuleInit<CMICmnLLDBDebugger>(IDS_MI_INIT_ERR_LLDBDEBUGGER, bOk, errMsg);
#if MICONFIG_COMPILE_MIDRIVER_WITH_LLDBDRIVER
- CMIDriverMgr & rDrvMgr = CMIDriverMgr::Instance();
- bOk = bOk && rDrvMgr.RegisterDriver( *g_driver, "LLDB driver" ); // Will be pass thru driver
- if( bOk )
- {
- bOk = SetEnableFallThru( false ); // This is intentional at this time - yet to be fully implemented
- bOk = bOk && SetDriverToFallThruTo( *g_driver );
- CMIUtilString strOtherDrvErrMsg;
- if( bOk && GetEnableFallThru() && !g_driver->MISetup( strOtherDrvErrMsg ) )
- {
- bOk = false;
- errMsg = CMIUtilString::Format( MIRSRC( IDS_MI_INIT_ERR_FALLTHRUDRIVER ), strOtherDrvErrMsg.c_str() );
- }
- }
+ CMIDriverMgr &rDrvMgr = CMIDriverMgr::Instance();
+ bOk = bOk && rDrvMgr.RegisterDriver(*g_driver, "LLDB driver"); // Will be pass thru driver
+ if (bOk)
+ {
+ bOk = SetEnableFallThru(false); // This is intentional at this time - yet to be fully implemented
+ bOk = bOk && SetDriverToFallThruTo(*g_driver);
+ CMIUtilString strOtherDrvErrMsg;
+ if (bOk && GetEnableFallThru() && !g_driver->MISetup(strOtherDrvErrMsg))
+ {
+ bOk = false;
+ errMsg = CMIUtilString::Format(MIRSRC(IDS_MI_INIT_ERR_FALLTHRUDRIVER), strOtherDrvErrMsg.c_str());
+ }
+ }
#endif // MICONFIG_COMPILE_MIDRIVER_WITH_LLDBDRIVER
- m_bExitApp = false;
-
- m_bInitialized = bOk;
+ m_bExitApp = false;
- if( !bOk )
- {
- const CMIUtilString msg = CMIUtilString::Format( MIRSRC( IDS_MI_INIT_ERR_DRIVER ), errMsg.c_str() );
- SetErrorDescription( msg );
- return MIstatus::failure;
- }
+ m_bInitialized = bOk;
- m_eCurrentDriverState = eDriverState_RunningNotDebugging;
-
- return bOk;
+ if (!bOk)
+ {
+ const CMIUtilString msg = CMIUtilString::Format(MIRSRC(IDS_MI_INIT_ERR_DRIVER), errMsg.c_str());
+ SetErrorDescription(msg);
+ return MIstatus::failure;
+ }
+
+ m_eCurrentDriverState = eDriverState_RunningNotDebugging;
+
+ return bOk;
}
//++ ------------------------------------------------------------------------------------
-// Details: Unbind detach or release resources used by *this driver.
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
+// Details: Unbind detach or release resources used by *this driver.
+// Type: Method.
+// Args: None.
+// Return: MIstatus::success - Functional succeeded.
+// MIstatus::failure - Functional failed.
+// Throws: None.
//--
-bool CMIDriver::Shutdown( void )
+bool
+CMIDriver::Shutdown(void)
{
- if( --m_clientUsageRefCnt > 0 )
- return MIstatus::success;
-
- if( !m_bInitialized )
- return MIstatus::success;
-
- m_eCurrentDriverState = eDriverState_ShuttingDown;
-
- ClrErrorDescription();
-
- bool bOk = MIstatus::success;
- CMIUtilString errMsg;
-
- // Shutdown all of the modules we depend on
- MI::ModuleShutdown< CMICmnLLDBDebugger >( IDS_MI_INIT_ERR_LLDBDEBUGGER , bOk, errMsg );
- MI::ModuleShutdown< CMICmdMgr > ( IDS_MI_INIT_ERR_CMDMGR , bOk, errMsg );
- MI::ModuleShutdown< CMICmnStreamStdin > ( IDS_MI_INIT_ERR_STREAMSTDIN , bOk, errMsg );
- MI::ModuleShutdown< CMICmnThreadMgrStd >( IDS_MI_INIT_ERR_THREADMANAGER, bOk, errMsg );
- MI::ModuleShutdown< CMICmnResources > ( IDS_MI_INIT_ERR_RESOURCES , bOk, errMsg );
- MI::ModuleShutdown< CMICmnStreamStderr >( IDS_MI_INIT_ERR_STREAMSTDERR , bOk, errMsg );
- MI::ModuleShutdown< CMICmnStreamStdout >( IDS_MI_INIT_ERR_STREAMSTDOUT , bOk, errMsg );
- MI::ModuleShutdown< CMICmnLog > ( IDS_MI_INIT_ERR_LOG , bOk, errMsg );
-
- if( !bOk )
- {
- SetErrorDescriptionn( MIRSRC( IDS_MI_SHUTDOWN_ERR ), errMsg.c_str() );
- }
-
- m_eCurrentDriverState = eDriverState_NotRunning;
-
- return bOk;
+ if (--m_clientUsageRefCnt > 0)
+ return MIstatus::success;
+
+ if (!m_bInitialized)
+ return MIstatus::success;
+
+ m_eCurrentDriverState = eDriverState_ShuttingDown;
+
+ ClrErrorDescription();
+
+ bool bOk = MIstatus::success;
+ CMIUtilString errMsg;
+
+ // Shutdown all of the modules we depend on
+ MI::ModuleShutdown<CMICmnLLDBDebugger>(IDS_MI_INIT_ERR_LLDBDEBUGGER, bOk, errMsg);
+ MI::ModuleShutdown<CMICmdMgr>(IDS_MI_INIT_ERR_CMDMGR, bOk, errMsg);
+ MI::ModuleShutdown<CMICmnStreamStdin>(IDS_MI_INIT_ERR_STREAMSTDIN, bOk, errMsg);
+ MI::ModuleShutdown<CMICmnThreadMgrStd>(IDS_MI_INIT_ERR_THREADMANAGER, bOk, errMsg);
+ MI::ModuleShutdown<CMICmnResources>(IDS_MI_INIT_ERR_RESOURCES, bOk, errMsg);
+ MI::ModuleShutdown<CMICmnStreamStderr>(IDS_MI_INIT_ERR_STREAMSTDERR, bOk, errMsg);
+ MI::ModuleShutdown<CMICmnStreamStdout>(IDS_MI_INIT_ERR_STREAMSTDOUT, bOk, errMsg);
+ MI::ModuleShutdown<CMICmnLog>(IDS_MI_INIT_ERR_LOG, bOk, errMsg);
+
+ if (!bOk)
+ {
+ SetErrorDescriptionn(MIRSRC(IDS_MI_SHUTDOWN_ERR), errMsg.c_str());
+ }
+
+ m_eCurrentDriverState = eDriverState_NotRunning;
+
+ return bOk;
}
//++ ------------------------------------------------------------------------------------
-// Details: Work function. Client (the driver's user) is able to append their own message
-// in to the MI's Log trace file.
-// Type: Method.
-// Args: vMessage - (R) Client's text message.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
+// Details: Work function. Client (the driver's user) is able to append their own message
+// in to the MI's Log trace file.
+// Type: Method.
+// Args: vMessage - (R) Client's text message.
+// Return: MIstatus::success - Functional succeeded.
+// MIstatus::failure - Functional failed.
+// Throws: None.
//--
-bool CMIDriver::WriteMessageToLog( const CMIUtilString & vMessage )
+bool
+CMIDriver::WriteMessageToLog(const CMIUtilString &vMessage)
{
- CMIUtilString msg;
- msg = CMIUtilString::Format( MIRSRC( IDS_MI_CLIENT_MSG ), vMessage.c_str() );
- return m_pLog->Write( msg, CMICmnLog::eLogVerbosity_ClientMsg );
+ CMIUtilString msg;
+ msg = CMIUtilString::Format(MIRSRC(IDS_MI_CLIENT_MSG), vMessage.c_str());
+ return m_pLog->Write(msg, CMICmnLog::eLogVerbosity_ClientMsg);
}
//++ ------------------------------------------------------------------------------------
// Details: CDriverMgr calls *this driver initialize setup ready for use.
-// Type: Overridden.
-// Args: None.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
+// Type: Overridden.
+// Args: None.
+// Return: MIstatus::success - Functional succeeded.
+// MIstatus::failure - Functional failed.
+// Throws: None.
//--
-bool CMIDriver::DoInitialize( void )
+bool
+CMIDriver::DoInitialize(void)
{
- return CMIDriver::Instance().Initialize();
+ return CMIDriver::Instance().Initialize();
}
//++ ------------------------------------------------------------------------------------
-// Details: CDriverMgr calls *this driver to unbind detach or release resources used by
-// *this driver.
-// Type: Overridden.
-// Args: None.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
+// Details: CDriverMgr calls *this driver to unbind detach or release resources used by
+// *this driver.
+// Type: Overridden.
+// Args: None.
+// Return: MIstatus::success - Functional succeeded.
+// MIstatus::failure - Functional failed.
+// Throws: None.
//--
-bool CMIDriver::DoShutdown( void )
+bool
+CMIDriver::DoShutdown(void)
{
- return CMIDriver::Instance().Shutdown();
+ return CMIDriver::Instance().Shutdown();
}
//++ ------------------------------------------------------------------------------------
-// Details: Retrieve the name for *this driver.
-// Type: Overridden.
-// Args: None.
-// Return: CMIUtilString & - Driver name.
-// Throws: None.
+// Details: Retrieve the name for *this driver.
+// Type: Overridden.
+// Args: None.
+// Return: CMIUtilString & - Driver name.
+// Throws: None.
//--
-const CMIUtilString & CMIDriver::GetName( void ) const
+const CMIUtilString &
+CMIDriver::GetName(void) const
{
- const CMIUtilString & rName = GetAppNameLong();
- const CMIUtilString & rVsn = GetVersionDescription();
- static CMIUtilString strName = CMIUtilString::Format( "%s %s", rName.c_str(), rVsn.c_str() );
-
- return strName;
+ const CMIUtilString &rName = GetAppNameLong();
+ const CMIUtilString &rVsn = GetVersionDescription();
+ static CMIUtilString strName = CMIUtilString::Format("%s %s", rName.c_str(), rVsn.c_str());
+
+ return strName;
}
//++ ------------------------------------------------------------------------------------
-// Details: Retrieve *this driver's last error condition.
-// Type: Overridden.
-// Args: None.
-// Return: CMIUtilString - Text description.
-// Throws: None.
+// Details: Retrieve *this driver's last error condition.
+// Type: Overridden.
+// Args: None.
+// Return: CMIUtilString - Text description.
+// Throws: None.
//--
-CMIUtilString CMIDriver::GetError( void ) const
+CMIUtilString
+CMIDriver::GetError(void) const
{
- return GetErrorDescription();
+ return GetErrorDescription();
}
//++ ------------------------------------------------------------------------------------
-// Details: Call *this driver to resize the console window.
-// Type: Overridden.
-// Args: vTermWidth - (R) New window column size.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
+// Details: Call *this driver to resize the console window.
+// Type: Overridden.
+// Args: vTermWidth - (R) New window column size.
+// Return: MIstatus::success - Functional succeeded.
+// MIstatus::failure - Functional failed.
+// Throws: None.
//--
-void CMIDriver::DoResizeWindow( const uint32_t vTermWidth )
+void
+CMIDriver::DoResizeWindow(const uint32_t vTermWidth)
{
- GetTheDebugger().SetTerminalWidth( vTermWidth );
+ GetTheDebugger().SetTerminalWidth(vTermWidth);
}
//++ ------------------------------------------------------------------------------------
-// Details: Call *this driver to return it's debugger.
-// Type: Overridden.
-// Args: None.
-// Return: lldb::SBDebugger & - LLDB debugger object reference.
-// Throws: None.
+// Details: Call *this driver to return it's debugger.
+// Type: Overridden.
+// Args: None.
+// Return: lldb::SBDebugger & - LLDB debugger object reference.
+// Throws: None.
//--
-lldb::SBDebugger & CMIDriver::GetTheDebugger( void )
+lldb::SBDebugger &
+CMIDriver::GetTheDebugger(void)
{
- return m_rLldbDebugger.GetTheDebugger();
+ return m_rLldbDebugger.GetTheDebugger();
}
//++ ------------------------------------------------------------------------------------
-// Details: Specify another driver *this driver can call should this driver not be able
-// to handle the client data input. DoFallThruToAnotherDriver() makes the call.
-// Type: Overridden.
-// Args: vrOtherDriver - (R) Reference to another driver object.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
+// Details: Specify another driver *this driver can call should this driver not be able
+// to handle the client data input. DoFallThruToAnotherDriver() makes the call.
+// Type: Overridden.
+// Args: vrOtherDriver - (R) Reference to another driver object.
+// Return: MIstatus::success - Functional succeeded.
+// MIstatus::failure - Functional failed.
+// Throws: None.
//--
-bool CMIDriver::SetDriverToFallThruTo( const CMIDriverBase & vrOtherDriver )
+bool
+CMIDriver::SetDriverToFallThruTo(const CMIDriverBase &vrOtherDriver)
{
- m_pDriverFallThru = const_cast< CMIDriverBase * >( &vrOtherDriver );
+ m_pDriverFallThru = const_cast<CMIDriverBase *>(&vrOtherDriver);
- return m_pDriverFallThru->SetDriverParent( *this );
+ return m_pDriverFallThru->SetDriverParent(*this);
}
//++ ------------------------------------------------------------------------------------
-// Details: Proxy function CMIDriverMgr IDriver interface implementation. *this driver's
-// implementation called from here to match the existing function name of the
-// original LLDb driver class (the extra indirection is not necessarily required).
-// Check the arguments that were passed to this program to make sure they are
-// valid and to get their argument values (if any).
-// Type: Overridden.
-// Args: argc - (R) An integer that contains the count of arguments that follow in
-// argv. The argc parameter is always greater than or equal to 1.
-// argv - (R) An array of null-terminated strings representing command-line
-// arguments entered by the user of the program. By convention,
-// argv[0] is the command with which the program is invoked.
-// vpStdOut - (R) Pointer to a standard output stream.
-// vwbExiting - (W) True = *this want to exit, Reasons: help, invalid arg(s),
-// version information only.
-// False = Continue to work, start debugger i.e. Command
-// interpreter.
-// Return: lldb::SBError - LLDB current error status.
-// Throws: None.
+// Details: Proxy function CMIDriverMgr IDriver interface implementation. *this driver's
+// implementation called from here to match the existing function name of the
+// original LLDb driver class (the extra indirection is not necessarily required).
+// Check the arguments that were passed to this program to make sure they are
+// valid and to get their argument values (if any).
+// Type: Overridden.
+// Args: argc - (R) An integer that contains the count of arguments that follow in
+// argv. The argc parameter is always greater than or equal to 1.
+// argv - (R) An array of null-terminated strings representing command-line
+// arguments entered by the user of the program. By convention,
+// argv[0] is the command with which the program is invoked.
+// vpStdOut - (R) Pointer to a standard output stream.
+// vwbExiting - (W) True = *this want to exit, Reasons: help, invalid arg(s),
+// version information only.
+// False = Continue to work, start debugger i.e. Command
+// interpreter.
+// Return: lldb::SBError - LLDB current error status.
+// Throws: None.
//--
-lldb::SBError CMIDriver::DoParseArgs( const int argc, const char * argv[], FILE * vpStdOut, bool & vwbExiting )
+lldb::SBError
+CMIDriver::DoParseArgs(const int argc, const char *argv[], FILE *vpStdOut, bool &vwbExiting)
{
- return ParseArgs( argc, argv, vpStdOut, vwbExiting );
+ return ParseArgs(argc, argv, vpStdOut, vwbExiting);
}
//++ ------------------------------------------------------------------------------------
-// Details: Check the arguments that were passed to this program to make sure they are
-// valid and to get their argument values (if any). The following are options
-// that are only handled by *this driver:
-// --executable
-// The application's options --interpreter and --executable in code act very similar.
-// The --executable is necessary to differentiate whither the MI Driver is being
-// using by a client i.e. Eclipse or from the command line. Eclipse issues the option
-// --interpreter and also passes additional arguments which can be interpreted as an
-// executable if called from the command line. Using --executable tells the MI
-// Driver is being called the command line and that the executable argument is indeed
-// a specified executable an so actions commands to set up the executable for a
-// debug session. Using --interpreter on the commnd line does not action additional
-// commands to initialise a debug session and so be able to launch the process.
-// Type: Overridden.
-// Args: argc - (R) An integer that contains the count of arguments that follow in
-// argv. The argc parameter is always greater than or equal to 1.
-// argv - (R) An array of null-terminated strings representing command-line
-// arguments entered by the user of the program. By convention,
-// argv[0] is the command with which the program is invoked.
-// vpStdOut - (R) Pointer to a standard output stream.
-// vwbExiting - (W) True = *this want to exit, Reasons: help, invalid arg(s),
-// version information only.
-// False = Continue to work, start debugger i.e. Command
-// interpreter.
-// Return: lldb::SBError - LLDB current error status.
-// Throws: None.
+// Details: Check the arguments that were passed to this program to make sure they are
+// valid and to get their argument values (if any). The following are options
+// that are only handled by *this driver:
+// --executable
+// The application's options --interpreter and --executable in code act very similar.
+// The --executable is necessary to differentiate whither the MI Driver is being
+// using by a client i.e. Eclipse or from the command line. Eclipse issues the option
+// --interpreter and also passes additional arguments which can be interpreted as an
+// executable if called from the command line. Using --executable tells the MI
+// Driver is being called the command line and that the executable argument is indeed
+// a specified executable an so actions commands to set up the executable for a
+// debug session. Using --interpreter on the commnd line does not action additional
+// commands to initialise a debug session and so be able to launch the process.
+// Type: Overridden.
+// Args: argc - (R) An integer that contains the count of arguments that follow in
+// argv. The argc parameter is always greater than or equal to 1.
+// argv - (R) An array of null-terminated strings representing command-line
+// arguments entered by the user of the program. By convention,
+// argv[0] is the command with which the program is invoked.
+// vpStdOut - (R) Pointer to a standard output stream.
+// vwbExiting - (W) True = *this want to exit, Reasons: help, invalid arg(s),
+// version information only.
+// False = Continue to work, start debugger i.e. Command
+// interpreter.
+// Return: lldb::SBError - LLDB current error status.
+// Throws: None.
//--
-lldb::SBError CMIDriver::ParseArgs( const int argc, const char * argv[], FILE * vpStdOut, bool & vwbExiting )
+lldb::SBError
+CMIDriver::ParseArgs(const int argc, const char *argv[], FILE *vpStdOut, bool &vwbExiting)
{
- lldb::SBError errStatus;
- const bool bHaveArgs( argc >= 2 );
-
- // *** Add any args handled here to GetHelpOnCmdLineArgOptions() ***
-
- // CODETAG_MIDRIVE_CMD_LINE_ARG_HANDLING
- // Look for the command line options
- bool bHaveExecutableFileNamePath = false;
- bool bHaveExecutableLongOption = false;
-
- if( bHaveArgs )
- {
- // Search right to left to look for the executable
- for( MIint i = argc - 1; i > 0; i-- )
- {
- const CMIUtilString strArg( argv[ i ] );
- const CMICmdArgValFile argFile;
- if( argFile.IsFilePath( strArg ) ||
- CMICmdArgValString( true, false, true ).IsStringArg( strArg ))
- {
- bHaveExecutableFileNamePath = true;
- m_strCmdLineArgExecuteableFileNamePath = argFile.GetFileNamePath( strArg );
- m_bHaveExecutableFileNamePathOnCmdLine = true;
- }
- // This argument is also check for in CMIDriverMgr::ParseArgs()
- if( 0 == strArg.compare( "--executable" ) ) // Used to specify that there is executable argument also on the command line
- { // See fn description.
- bHaveExecutableLongOption = true;
- }
- }
- }
-
- if( bHaveExecutableFileNamePath && bHaveExecutableLongOption )
- {
- // CODETAG_CMDLINE_ARG_EXECUTABLE_DEBUG_SESSION
+ lldb::SBError errStatus;
+ const bool bHaveArgs(argc >= 2);
+
+ // *** Add any args handled here to GetHelpOnCmdLineArgOptions() ***
+
+ // CODETAG_MIDRIVE_CMD_LINE_ARG_HANDLING
+ // Look for the command line options
+ bool bHaveExecutableFileNamePath = false;
+ bool bHaveExecutableLongOption = false;
+
+ if (bHaveArgs)
+ {
+ // Search right to left to look for the executable
+ for (MIint i = argc - 1; i > 0; i--)
+ {
+ const CMIUtilString strArg(argv[i]);
+ const CMICmdArgValFile argFile;
+ if (argFile.IsFilePath(strArg) || CMICmdArgValString(true, false, true).IsStringArg(strArg))
+ {
+ bHaveExecutableFileNamePath = true;
+ m_strCmdLineArgExecuteableFileNamePath = argFile.GetFileNamePath(strArg);
+ m_bHaveExecutableFileNamePathOnCmdLine = true;
+ }
+ // This argument is also check for in CMIDriverMgr::ParseArgs()
+ if (0 == strArg.compare("--executable")) // Used to specify that there is executable argument also on the command line
+ { // See fn description.
+ bHaveExecutableLongOption = true;
+ }
+ }
+ }
+
+ if (bHaveExecutableFileNamePath && bHaveExecutableLongOption)
+ {
+// CODETAG_CMDLINE_ARG_EXECUTABLE_DEBUG_SESSION
#if MICONFIG_ENABLE_MI_DRIVER_MI_MODE_CMDLINE_ARG_EXECUTABLE_DEBUG_SESSION
- SetDriverDebuggingArgExecutable();
+ SetDriverDebuggingArgExecutable();
#else
- vwbExiting = true;
- errStatus.SetErrorString( MIRSRC( IDS_DRIVER_ERR_LOCAL_DEBUG_NOT_IMPL ) );
+ vwbExiting = true;
+ errStatus.SetErrorString(MIRSRC(IDS_DRIVER_ERR_LOCAL_DEBUG_NOT_IMPL));
#endif // MICONFIG_ENABLE_MI_DRIVER_MI_MODE_CMDLINE_ARG_EXECUTABLE_DEBUG_SESSION
- }
+ }
- return errStatus;
+ return errStatus;
}
//++ ------------------------------------------------------------------------------------
-// Details: A client can ask if *this driver is GDB/MI compatible.
-// Type: Overridden.
-// Args: None.
-// Return: True - GBD/MI compatible LLDB front end.
-// False - Not GBD/MI compatible LLDB front end.
-// Throws: None.
+// Details: A client can ask if *this driver is GDB/MI compatible.
+// Type: Overridden.
+// Args: None.
+// Return: True - GBD/MI compatible LLDB front end.
+// False - Not GBD/MI compatible LLDB front end.
+// Throws: None.
//--
-bool CMIDriver::GetDriverIsGDBMICompatibleDriver( void ) const
+bool
+CMIDriver::GetDriverIsGDBMICompatibleDriver(void) const
{
- return true;
+ return true;
}
//++ ------------------------------------------------------------------------------------
-// Details: Callback function for monitoring stream stdin object. Part of the visitor
-// pattern.
-// This function is called by the CMICmnStreamStdin::CThreadStdin
-// "stdin monitor" thread (ID).
-// Type: Overridden.
-// Args: vStdInBuffer - (R) Copy of the current stdin line data.
-// vrbYesExit - (RW) True = yes exit stdin monitoring, false = continue monitor.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
+// Details: Callback function for monitoring stream stdin object. Part of the visitor
+// pattern.
+// This function is called by the CMICmnStreamStdin::CThreadStdin
+// "stdin monitor" thread (ID).
+// Type: Overridden.
+// Args: vStdInBuffer - (R) Copy of the current stdin line data.
+// vrbYesExit - (RW) True = yes exit stdin monitoring, false = continue monitor.
+// Return: MIstatus::success - Functional succeeded.
+// MIstatus::failure - Functional failed.
+// Throws: None.
//--
-bool CMIDriver::ReadLine( const CMIUtilString & vStdInBuffer, bool & vrwbYesExit )
+bool
+CMIDriver::ReadLine(const CMIUtilString &vStdInBuffer, bool &vrwbYesExit)
{
- // For debugging. Update prompt show stdin is working
- //printf( "%s\n", vStdInBuffer.c_str() );
- //fflush( stdout );
+ // For debugging. Update prompt show stdin is working
+ // printf( "%s\n", vStdInBuffer.c_str() );
+ // fflush( stdout );
- // Special case look for the quit command here so stop monitoring stdin stream
- // So we do not go back to fgetc() and wait and hang thread on exit
- if( vStdInBuffer == "quit" )
- vrwbYesExit = true;
+ // Special case look for the quit command here so stop monitoring stdin stream
+ // So we do not go back to fgetc() and wait and hang thread on exit
+ if (vStdInBuffer == "quit")
+ vrwbYesExit = true;
- // 1. Put new line in the queue container by stdin monitor thread
- // 2. Then *this driver calls ReadStdinLineQueue() when ready to read the queue in its
- // own thread
- const bool bOk = QueueMICommand( vStdInBuffer );
+ // 1. Put new line in the queue container by stdin monitor thread
+ // 2. Then *this driver calls ReadStdinLineQueue() when ready to read the queue in its
+ // own thread
+ const bool bOk = QueueMICommand(vStdInBuffer);
- // Check to see if the *this driver is shutting down (exit application)
- if( !vrwbYesExit )
- vrwbYesExit = m_bDriverIsExiting;
+ // Check to see if the *this driver is shutting down (exit application)
+ if (!vrwbYesExit)
+ vrwbYesExit = m_bDriverIsExiting;
- return bOk;
+ return bOk;
}
//++ ------------------------------------------------------------------------------------
-// Details: Start worker threads for the driver.
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
+// Details: Start worker threads for the driver.
+// Type: Method.
+// Args: None.
+// Return: MIstatus::success - Functional succeeded.
+// MIstatus::failure - Functional failed.
+// Throws: None.
//--
-bool CMIDriver::StartWorkerThreads( void )
+bool
+CMIDriver::StartWorkerThreads(void)
{
- bool bOk = MIstatus::success;
-
- // Grab the thread manager
- CMICmnThreadMgrStd & rThreadMgr = CMICmnThreadMgrStd::Instance();
-
- // Start the stdin thread
- bOk &= m_rStdin.SetVisitor( *this );
- if( bOk && !rThreadMgr.ThreadStart< CMICmnStreamStdin >( m_rStdin ))
- {
- const CMIUtilString errMsg = CMIUtilString::Format( MIRSRC( IDS_THREADMGR_ERR_THREAD_FAIL_CREATE ), CMICmnThreadMgrStd::Instance().GetErrorDescription().c_str() );
- SetErrorDescriptionn( errMsg );
- return MIstatus::failure;
- }
-
- // Start the event polling thread
- if( bOk && !rThreadMgr.ThreadStart< CMICmnLLDBDebugger >( m_rLldbDebugger ) )
- {
- const CMIUtilString errMsg = CMIUtilString::Format( MIRSRC( IDS_THREADMGR_ERR_THREAD_FAIL_CREATE ), CMICmnThreadMgrStd::Instance().GetErrorDescription().c_str() );
- SetErrorDescriptionn( errMsg );
- return MIstatus::failure;
- }
-
- return bOk;
+ bool bOk = MIstatus::success;
+
+ // Grab the thread manager
+ CMICmnThreadMgrStd &rThreadMgr = CMICmnThreadMgrStd::Instance();
+
+ // Start the stdin thread
+ bOk &= m_rStdin.SetVisitor(*this);
+ if (bOk && !rThreadMgr.ThreadStart<CMICmnStreamStdin>(m_rStdin))
+ {
+ const CMIUtilString errMsg = CMIUtilString::Format(MIRSRC(IDS_THREADMGR_ERR_THREAD_FAIL_CREATE),
+ CMICmnThreadMgrStd::Instance().GetErrorDescription().c_str());
+ SetErrorDescriptionn(errMsg);
+ return MIstatus::failure;
+ }
+
+ // Start the event polling thread
+ if (bOk && !rThreadMgr.ThreadStart<CMICmnLLDBDebugger>(m_rLldbDebugger))
+ {
+ const CMIUtilString errMsg = CMIUtilString::Format(MIRSRC(IDS_THREADMGR_ERR_THREAD_FAIL_CREATE),
+ CMICmnThreadMgrStd::Instance().GetErrorDescription().c_str());
+ SetErrorDescriptionn(errMsg);
+ return MIstatus::failure;
+ }
+
+ return bOk;
}
//++ ------------------------------------------------------------------------------------
-// Details: Stop worker threads for the driver.
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
+// Details: Stop worker threads for the driver.
+// Type: Method.
+// Args: None.
+// Return: MIstatus::success - Functional succeeded.
+// MIstatus::failure - Functional failed.
+// Throws: None.
//--
-bool CMIDriver::StopWorkerThreads( void )
+bool
+CMIDriver::StopWorkerThreads(void)
{
- CMICmnThreadMgrStd & rThreadMgr = CMICmnThreadMgrStd::Instance();
- return rThreadMgr.ThreadAllTerminate();
+ CMICmnThreadMgrStd &rThreadMgr = CMICmnThreadMgrStd::Instance();
+ return rThreadMgr.ThreadAllTerminate();
}
//++ ------------------------------------------------------------------------------------
-// Details: Call this function puts *this driver to work.
-// This function is used by the application's main thread.
-// Type: Overridden.
-// Args: None.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
+// Details: Call this function puts *this driver to work.
+// This function is used by the application's main thread.
+// Type: Overridden.
+// Args: None.
+// Return: MIstatus::success - Functional succeeded.
+// MIstatus::failure - Functional failed.
+// Throws: None.
//--
-bool CMIDriver::DoMainLoop( void )
+bool
+CMIDriver::DoMainLoop(void)
{
- if( !InitClientIDEToMIDriver() ) // Init Eclipse IDE
- {
- SetErrorDescriptionn( MIRSRC( IDS_MI_INIT_ERR_CLIENT_USING_DRIVER ) );
- return MIstatus::failure;
- }
-
- if( !StartWorkerThreads() )
- return MIstatus::failure;
-
- // App is not quitting currently
- m_bExitApp = false;
-
- // CODETAG_CMDLINE_ARG_EXECUTABLE_DEBUG_SESSION
+ if (!InitClientIDEToMIDriver()) // Init Eclipse IDE
+ {
+ SetErrorDescriptionn(MIRSRC(IDS_MI_INIT_ERR_CLIENT_USING_DRIVER));
+ return MIstatus::failure;
+ }
+
+ if (!StartWorkerThreads())
+ return MIstatus::failure;
+
+ // App is not quitting currently
+ m_bExitApp = false;
+
+// CODETAG_CMDLINE_ARG_EXECUTABLE_DEBUG_SESSION
#if MICONFIG_ENABLE_MI_DRIVER_MI_MODE_CMDLINE_ARG_EXECUTABLE_DEBUG_SESSION
- if( HaveExecutableFileNamePathOnCmdLine() )
- {
- if( !LocalDebugSessionStartupInjectCommands() )
- {
- SetErrorDescription( MIRSRC( IDS_MI_INIT_ERR_LOCAL_DEBUG_SESSION ) );
- return MIstatus::failure;
- }
- }
+ if (HaveExecutableFileNamePathOnCmdLine())
+ {
+ if (!LocalDebugSessionStartupInjectCommands())
+ {
+ SetErrorDescription(MIRSRC(IDS_MI_INIT_ERR_LOCAL_DEBUG_SESSION));
+ return MIstatus::failure;
+ }
+ }
#endif // MICONFIG_ENABLE_MI_DRIVER_MI_MODE_CMDLINE_ARG_EXECUTABLE_DEBUG_SESSION
- // While the app is active
- while( !m_bExitApp )
- {
- // Poll stdin queue and dispatch
- if( !ReadStdinLineQueue() )
- {
- // Something went wrong
- break;
- }
- }
+ // While the app is active
+ while (!m_bExitApp)
+ {
+ // Poll stdin queue and dispatch
+ if (!ReadStdinLineQueue())
+ {
+ // Something went wrong
+ break;
+ }
+ }
- // Signal that the application is shutting down
- DoAppQuit();
+ // Signal that the application is shutting down
+ DoAppQuit();
- // Close and wait for the workers to stop
- StopWorkerThreads();
+ // Close and wait for the workers to stop
+ StopWorkerThreads();
- // Ensure that a new line is sent as the last act of the dying driver
- m_rStdOut.WriteMIResponse( "\n", false );
+ // Ensure that a new line is sent as the last act of the dying driver
+ m_rStdOut.WriteMIResponse("\n", false);
- return MIstatus::success;
+ return MIstatus::success;
}
//++ ------------------------------------------------------------------------------------
-// Details: *this driver sits and waits for input to the stdin line queue shared by *this
-// driver and the stdin monitor thread, it queues, *this reads, interprets and
-// reacts.
-// This function is used by the application's main thread.
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
+// Details: *this driver sits and waits for input to the stdin line queue shared by *this
+// driver and the stdin monitor thread, it queues, *this reads, interprets and
+// reacts.
+// This function is used by the application's main thread.
+// Type: Method.
+// Args: None.
+// Return: MIstatus::success - Functional succeeded.
+// MIstatus::failure - Functional failed.
+// Throws: None.
//--
-bool CMIDriver::ReadStdinLineQueue( void )
+bool
+CMIDriver::ReadStdinLineQueue(void)
{
- // True when queue contains input
- bool bHaveInput = false;
-
- // Stores the current input line
- CMIUtilString lineText;
- {
- // Lock while we access the queue
- CMIUtilThreadLock lock( m_threadMutex );
- if( !m_queueStdinLine.empty() )
- {
- lineText = m_queueStdinLine.front();
- m_queueStdinLine.pop();
- bHaveInput = !lineText.empty();
- }
- }
-
- // Process while we have input
- if( bHaveInput )
- {
- if( lineText == "quit" )
- {
- // We want to be exiting when receiving a quit command
- m_bExitApp = true;
- return MIstatus::success;
- }
-
- // Process the command
- const bool bOk = InterpretCommand( lineText );
-
- // Draw prompt if desired
- if( bOk && m_rStdin.GetEnablePrompt() )
- m_rStdOut.WriteMIResponse( m_rStdin.GetPrompt() );
-
- // Input has been processed
- bHaveInput = false;
- }
- else
- {
- // Give resources back to the OS
- const std::chrono::milliseconds time( 1 );
- std::this_thread::sleep_for( time );
- }
-
- return MIstatus::success;
+ // True when queue contains input
+ bool bHaveInput = false;
+
+ // Stores the current input line
+ CMIUtilString lineText;
+ {
+ // Lock while we access the queue
+ CMIUtilThreadLock lock(m_threadMutex);
+ if (!m_queueStdinLine.empty())
+ {
+ lineText = m_queueStdinLine.front();
+ m_queueStdinLine.pop();
+ bHaveInput = !lineText.empty();
+ }
+ }
+
+ // Process while we have input
+ if (bHaveInput)
+ {
+ if (lineText == "quit")
+ {
+ // We want to be exiting when receiving a quit command
+ m_bExitApp = true;
+ return MIstatus::success;
+ }
+
+ // Process the command
+ const bool bOk = InterpretCommand(lineText);
+
+ // Draw prompt if desired
+ if (bOk && m_rStdin.GetEnablePrompt())
+ m_rStdOut.WriteMIResponse(m_rStdin.GetPrompt());
+
+ // Input has been processed
+ bHaveInput = false;
+ }
+ else
+ {
+ // Give resources back to the OS
+ const std::chrono::milliseconds time(1);
+ std::this_thread::sleep_for(time);
+ }
+
+ return MIstatus::success;
}
//++ ------------------------------------------------------------------------------------
-// Details: Set things in motion, set state etc that brings *this driver (and the
-// application) to a tidy shutdown.
-// This function is used by the application's main thread.
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
+// Details: Set things in motion, set state etc that brings *this driver (and the
+// application) to a tidy shutdown.
+// This function is used by the application's main thread.
+// Type: Method.
+// Args: None.
+// Return: MIstatus::success - Functional succeeded.
+// MIstatus::failure - Functional failed.
+// Throws: None.
//--
-bool CMIDriver::DoAppQuit( void )
+bool
+CMIDriver::DoAppQuit(void)
{
- bool bYesQuit = true;
+ bool bYesQuit = true;
- // Shutdown stuff, ready app for exit
- {
- CMIUtilThreadLock lock( m_threadMutex );
- m_bDriverIsExiting = true;
- }
+ // Shutdown stuff, ready app for exit
+ {
+ CMIUtilThreadLock lock(m_threadMutex);
+ m_bDriverIsExiting = true;
+ }
- return bYesQuit;
+ return bYesQuit;
}
//++ ------------------------------------------------------------------------------------
-// Details: *this driver passes text commands to a fall through driver is it does not
-// understand them (the LLDB driver).
-// This function is used by the application's main thread.
-// Type: Method.
-// Args: vTextLine - (R) Text data representing a possible command.
-// vwbCmdYesValid - (W) True = Command valid, false = command not handled.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
+// Details: *this driver passes text commands to a fall through driver is it does not
+// understand them (the LLDB driver).
+// This function is used by the application's main thread.
+// Type: Method.
+// Args: vTextLine - (R) Text data representing a possible command.
+// vwbCmdYesValid - (W) True = Command valid, false = command not handled.
+// Return: MIstatus::success - Functional succeeded.
+// MIstatus::failure - Functional failed.
+// Throws: None.
//--
-bool CMIDriver::InterpretCommandFallThruDriver( const CMIUtilString & vTextLine, bool & vwbCmdYesValid )
+bool
+CMIDriver::InterpretCommandFallThruDriver(const CMIUtilString &vTextLine, bool &vwbCmdYesValid)
{
- MIunused( vTextLine );
- MIunused( vwbCmdYesValid );
-
- // ToDo: Implement when less urgent work to be done or decide remove as not required
- //bool bOk = MIstatus::success;
- //bool bCmdNotUnderstood = true;
- //if( bCmdNotUnderstood && GetEnableFallThru() )
- //{
- // CMIUtilString errMsg;
- // bOk = DoFallThruToAnotherDriver( vStdInBuffer, errMsg );
- // if( !bOk )
- // {
- // errMsg = errMsg.StripCREndOfLine();
- // errMsg = errMsg.StripCRAll();
- // const CMIDriverBase * pOtherDriver = GetDriverToFallThruTo();
- // const MIchar * pName = pOtherDriver->GetDriverName().c_str();
- // const MIchar * pId = pOtherDriver->GetDriverId().c_str();
- // const CMIUtilString msg( CMIUtilString::Format( MIRSRC( IDS_DRIVER_ERR_FALLTHRU_DRIVER_ERR ), pName, pId, errMsg.c_str() ) );
- // m_pLog->WriteMsg( msg );
- // }
- //}
- //
- //vwbCmdYesValid = bOk;
- //CMIUtilString strNot;
- //if( vwbCmdYesValid)
- // strNot = CMIUtilString::Format( "%s ", MIRSRC( IDS_WORD_NOT ) );
- //const CMIUtilString msg( CMIUtilString::Format( MIRSRC( IDS_FALLTHRU_DRIVER_CMD_RECEIVED ), vTextLine.c_str(), strNot.c_str() ) );
- //m_pLog->WriteLog( msg );
-
- return MIstatus::success;
+ MIunused(vTextLine);
+ MIunused(vwbCmdYesValid);
+
+ // ToDo: Implement when less urgent work to be done or decide remove as not required
+ // bool bOk = MIstatus::success;
+ // bool bCmdNotUnderstood = true;
+ // if( bCmdNotUnderstood && GetEnableFallThru() )
+ //{
+ // CMIUtilString errMsg;
+ // bOk = DoFallThruToAnotherDriver( vStdInBuffer, errMsg );
+ // if( !bOk )
+ // {
+ // errMsg = errMsg.StripCREndOfLine();
+ // errMsg = errMsg.StripCRAll();
+ // const CMIDriverBase * pOtherDriver = GetDriverToFallThruTo();
+ // const MIchar * pName = pOtherDriver->GetDriverName().c_str();
+ // const MIchar * pId = pOtherDriver->GetDriverId().c_str();
+ // const CMIUtilString msg( CMIUtilString::Format( MIRSRC( IDS_DRIVER_ERR_FALLTHRU_DRIVER_ERR ), pName, pId, errMsg.c_str() )
+ //);
+ // m_pLog->WriteMsg( msg );
+ // }
+ //}
+ //
+ // vwbCmdYesValid = bOk;
+ // CMIUtilString strNot;
+ // if( vwbCmdYesValid)
+ // strNot = CMIUtilString::Format( "%s ", MIRSRC( IDS_WORD_NOT ) );
+ // const CMIUtilString msg( CMIUtilString::Format( MIRSRC( IDS_FALLTHRU_DRIVER_CMD_RECEIVED ), vTextLine.c_str(), strNot.c_str() ) );
+ // m_pLog->WriteLog( msg );
+
+ return MIstatus::success;
}
//++ ------------------------------------------------------------------------------------
-// Details: Retrieve the name for *this driver.
-// Type: Overridden.
-// Args: None.
-// Return: CMIUtilString & - Driver name.
-// Throws: None.
+// Details: Retrieve the name for *this driver.
+// Type: Overridden.
+// Args: None.
+// Return: CMIUtilString & - Driver name.
+// Throws: None.
//--
-const CMIUtilString & CMIDriver::GetDriverName( void ) const
+const CMIUtilString &
+CMIDriver::GetDriverName(void) const
{
- return GetName();
+ return GetName();
}
//++ ------------------------------------------------------------------------------------
-// Details: Get the unique ID for *this driver.
-// Type: Overridden.
-// Args: None.
-// Return: CMIUtilString & - Text description.
-// Throws: None.
+// Details: Get the unique ID for *this driver.
+// Type: Overridden.
+// Args: None.
+// Return: CMIUtilString & - Text description.
+// Throws: None.
//--
-const CMIUtilString & CMIDriver::GetDriverId( void ) const
+const CMIUtilString &
+CMIDriver::GetDriverId(void) const
{
- return GetId();
+ return GetId();
}
//++ ------------------------------------------------------------------------------------
-// Details: This function allows *this driver to call on another driver to perform work
-// should this driver not be able to handle the client data input.
-// SetDriverToFallThruTo() specifies the fall through to driver.
-// Check the error message if the function returns a failure.
-// Type: Overridden.
-// Args: vCmd - (R) Command instruction to interpret.
-// vwErrMsg - (W) Error description on command failing.
-// Return: MIstatus::success - Command succeeded.
-// MIstatus::failure - Command failed.
-// Throws: None.
+// Details: This function allows *this driver to call on another driver to perform work
+// should this driver not be able to handle the client data input.
+// SetDriverToFallThruTo() specifies the fall through to driver.
+// Check the error message if the function returns a failure.
+// Type: Overridden.
+// Args: vCmd - (R) Command instruction to interpret.
+// vwErrMsg - (W) Error description on command failing.
+// Return: MIstatus::success - Command succeeded.
+// MIstatus::failure - Command failed.
+// Throws: None.
//--
-bool CMIDriver::DoFallThruToAnotherDriver( const CMIUtilString & vCmd, CMIUtilString & vwErrMsg )
+bool
+CMIDriver::DoFallThruToAnotherDriver(const CMIUtilString &vCmd, CMIUtilString &vwErrMsg)
{
- bool bOk = MIstatus::success;
+ bool bOk = MIstatus::success;
- CMIDriverBase * pOtherDriver = GetDriverToFallThruTo();
- if( pOtherDriver == nullptr )
- return bOk;
+ CMIDriverBase *pOtherDriver = GetDriverToFallThruTo();
+ if (pOtherDriver == nullptr)
+ return bOk;
- return pOtherDriver->DoFallThruToAnotherDriver( vCmd, vwErrMsg );
+ return pOtherDriver->DoFallThruToAnotherDriver(vCmd, vwErrMsg);
}
//++ ------------------------------------------------------------------------------------
-// Details: *this driver provides a file stream to other drivers on which *this driver
-// write's out to and they read as expected input. *this driver is passing
-// through commands to the (child) pass through assigned driver.
-// Type: Overrdidden.
-// Args: None.
-// Return: FILE * - Pointer to stream.
-// Throws: None.
+// Details: *this driver provides a file stream to other drivers on which *this driver
+// write's out to and they read as expected input. *this driver is passing
+// through commands to the (child) pass through assigned driver.
+// Type: Overrdidden.
+// Args: None.
+// Return: FILE * - Pointer to stream.
+// Throws: None.
//--
-FILE * CMIDriver::GetStdin( void ) const
+FILE *
+CMIDriver::GetStdin(void) const
{
- // Note this fn is called on CMIDriverMgr register driver so stream has to be
- // available before *this driver has been initialized! Flaw?
+ // Note this fn is called on CMIDriverMgr register driver so stream has to be
+ // available before *this driver has been initialized! Flaw?
- // This very likely to change later to a stream that the pass thru driver
- // will read and we write to give it 'input'
- return stdin;
+ // This very likely to change later to a stream that the pass thru driver
+ // will read and we write to give it 'input'
+ return stdin;
}
//++ ------------------------------------------------------------------------------------
-// Details: *this driver provides a file stream to other pass through assigned drivers
-// so they know what to write to.
-// Type: Overidden.
-// Args: None.
-// Return: FILE * - Pointer to stream.
-// Throws: None.
+// Details: *this driver provides a file stream to other pass through assigned drivers
+// so they know what to write to.
+// Type: Overidden.
+// Args: None.
+// Return: FILE * - Pointer to stream.
+// Throws: None.
//--
-FILE * CMIDriver::GetStdout( void ) const
+FILE *
+CMIDriver::GetStdout(void) const
{
- // Note this fn is called on CMIDriverMgr register driver so stream has to be
- // available before *this driver has been initialized! Flaw?
+ // Note this fn is called on CMIDriverMgr register driver so stream has to be
+ // available before *this driver has been initialized! Flaw?
- // Do not want to pass through driver to write to stdout
- return NULL;
+ // Do not want to pass through driver to write to stdout
+ return NULL;
}
//++ ------------------------------------------------------------------------------------
-// Details: *this driver provides a error file stream to other pass through assigned drivers
-// so they know what to write to.
-// Type: Overidden.
-// Args: None.
-// Return: FILE * - Pointer to stream.
-// Throws: None.
+// Details: *this driver provides a error file stream to other pass through assigned drivers
+// so they know what to write to.
+// Type: Overidden.
+// Args: None.
+// Return: FILE * - Pointer to stream.
+// Throws: None.
//--
-FILE * CMIDriver::GetStderr( void ) const
+FILE *
+CMIDriver::GetStderr(void) const
{
- // Note this fn is called on CMIDriverMgr register driver so stream has to be
- // available before *this driver has been initialized! Flaw?
+ // Note this fn is called on CMIDriverMgr register driver so stream has to be
+ // available before *this driver has been initialized! Flaw?
- // This very likely to change later to a stream that the pass thru driver
- // will write to and *this driver reads from to pass on the CMICmnLog object
- return stderr;
+ // This very likely to change later to a stream that the pass thru driver
+ // will write to and *this driver reads from to pass on the CMICmnLog object
+ return stderr;
}
//++ ------------------------------------------------------------------------------------
-// Details: Set a unique ID for *this driver. It cannot be empty.
-// Type: Overridden.
-// Args: vId - (R) Text description.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
+// Details: Set a unique ID for *this driver. It cannot be empty.
+// Type: Overridden.
+// Args: vId - (R) Text description.
+// Return: MIstatus::success - Functional succeeded.
+// MIstatus::failure - Functional failed.
+// Throws: None.
//--
-bool CMIDriver::SetId( const CMIUtilString & vId )
+bool
+CMIDriver::SetId(const CMIUtilString &vId)
{
- if( vId.empty() )
- {
- SetErrorDescriptionn( MIRSRC( IDS_DRIVER_ERR_ID_INVALID ), GetName().c_str(), vId.c_str() );
- return MIstatus::failure;
- }
-
- m_strDriverId = vId;
- return MIstatus::success;
+ if (vId.empty())
+ {
+ SetErrorDescriptionn(MIRSRC(IDS_DRIVER_ERR_ID_INVALID), GetName().c_str(), vId.c_str());
+ return MIstatus::failure;
+ }
+
+ m_strDriverId = vId;
+ return MIstatus::success;
}
//++ ------------------------------------------------------------------------------------
-// Details: Get the unique ID for *this driver.
-// Type: Overridden.
-// Args: None.
-// Return: CMIUtilString & - Text description.
-// Throws: None.
+// Details: Get the unique ID for *this driver.
+// Type: Overridden.
+// Args: None.
+// Return: CMIUtilString & - Text description.
+// Throws: None.
//--
-const CMIUtilString & CMIDriver::GetId( void ) const
+const CMIUtilString &
+CMIDriver::GetId(void) const
{
- return m_strDriverId;
+ return m_strDriverId;
}
//++ ------------------------------------------------------------------------------------
-// Details: Inject a command into the command processing system to be interpreted as a
-// command read from stdin. The text representing the command is also written
-// out to stdout as the command did not come from via stdin.
-// Type: Method.
-// Args: vMICmd - (R) Text data representing a possible command.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
+// Details: Inject a command into the command processing system to be interpreted as a
+// command read from stdin. The text representing the command is also written
+// out to stdout as the command did not come from via stdin.
+// Type: Method.
+// Args: vMICmd - (R) Text data representing a possible command.
+// Return: MIstatus::success - Functional succeeded.
+// MIstatus::failure - Functional failed.
+// Throws: None.
//--
-bool CMIDriver::InjectMICommand( const CMIUtilString & vMICmd )
+bool
+CMIDriver::InjectMICommand(const CMIUtilString &vMICmd)
{
- const bool bOk = m_rStdOut.WriteMIResponse( vMICmd );
+ const bool bOk = m_rStdOut.WriteMIResponse(vMICmd);
- return bOk && QueueMICommand( vMICmd );
+ return bOk && QueueMICommand(vMICmd);
}
//++ ------------------------------------------------------------------------------------
-// Details: Add a new command candidate to the command queue to be processed by the
-// command system.
-// Type: Method.
-// Args: vMICmd - (R) Text data representing a possible command.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
+// Details: Add a new command candidate to the command queue to be processed by the
+// command system.
+// Type: Method.
+// Args: vMICmd - (R) Text data representing a possible command.
+// Return: MIstatus::success - Functional succeeded.
+// MIstatus::failure - Functional failed.
+// Throws: None.
//--
-bool CMIDriver::QueueMICommand( const CMIUtilString & vMICmd )
+bool
+CMIDriver::QueueMICommand(const CMIUtilString &vMICmd)
{
- CMIUtilThreadLock lock( m_threadMutex );
- m_queueStdinLine.push( vMICmd );
-
- return MIstatus::success;
+ CMIUtilThreadLock lock(m_threadMutex);
+ m_queueStdinLine.push(vMICmd);
+
+ return MIstatus::success;
}
-
+
//++ ------------------------------------------------------------------------------------
-// Details: Interpret the text data and match against current commands to see if there
-// is a match. If a match then the command is issued and actioned on. The
-// text data if not understood by *this driver is past on to the Fall Thru
-// driver.
-// This function is used by the application's main thread.
-// Type: Method.
-// Args: vTextLine - (R) Text data representing a possible command.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
+// Details: Interpret the text data and match against current commands to see if there
+// is a match. If a match then the command is issued and actioned on. The
+// text data if not understood by *this driver is past on to the Fall Thru
+// driver.
+// This function is used by the application's main thread.
+// Type: Method.
+// Args: vTextLine - (R) Text data representing a possible command.
+// Return: MIstatus::success - Functional succeeded.
+// MIstatus::failure - Functional failed.
+// Throws: None.
//--
-bool CMIDriver::InterpretCommand( const CMIUtilString & vTextLine )
+bool
+CMIDriver::InterpretCommand(const CMIUtilString &vTextLine)
{
- bool bCmdYesValid = false;
- bool bOk = InterpretCommandThisDriver( vTextLine, bCmdYesValid );
- if( bOk && !bCmdYesValid )
- bOk = InterpretCommandFallThruDriver( vTextLine, bCmdYesValid );
+ bool bCmdYesValid = false;
+ bool bOk = InterpretCommandThisDriver(vTextLine, bCmdYesValid);
+ if (bOk && !bCmdYesValid)
+ bOk = InterpretCommandFallThruDriver(vTextLine, bCmdYesValid);
- return bOk;
+ return bOk;
}
//++ ------------------------------------------------------------------------------------
-// Details: Interpret the text data and match against current commands to see if there
-// is a match. If a match then the command is issued and actioned on. If a
-// command cannot be found to match then vwbCmdYesValid is set to false and
-// nothing else is done here.
-// This function is used by the application's main thread.
-// Type: Method.
-// Args: vTextLine - (R) Text data representing a possible command.
-// vwbCmdYesValid - (W) True = Command invalid, false = command acted on.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
+// Details: Interpret the text data and match against current commands to see if there
+// is a match. If a match then the command is issued and actioned on. If a
+// command cannot be found to match then vwbCmdYesValid is set to false and
+// nothing else is done here.
+// This function is used by the application's main thread.
+// Type: Method.
+// Args: vTextLine - (R) Text data representing a possible command.
+// vwbCmdYesValid - (W) True = Command invalid, false = command acted on.
+// Return: MIstatus::success - Functional succeeded.
+// MIstatus::failure - Functional failed.
+// Throws: None.
//--
-bool CMIDriver::InterpretCommandThisDriver( const CMIUtilString & vTextLine, bool & vwbCmdYesValid )
+bool
+CMIDriver::InterpretCommandThisDriver(const CMIUtilString &vTextLine, bool &vwbCmdYesValid)
{
- vwbCmdYesValid = false;
-
- bool bCmdNotInCmdFactor = false;
- SMICmdData cmdData;
- CMICmdMgr & rCmdMgr = CMICmdMgr::Instance();
- if( !rCmdMgr.CmdInterpret( vTextLine, vwbCmdYesValid, bCmdNotInCmdFactor, cmdData ) )
- return MIstatus::failure;
-
- if( vwbCmdYesValid )
- {
- // For debugging only
- //m_pLog->WriteLog( cmdData.strMiCmdAll.c_str() );
-
- return ExecuteCommand( cmdData );
- }
-
- // Check for escape character, may be cursor control characters
- // This code is not necessary for application operation, just want to keep tabs on what
- // is been given to the driver to try and intepret.
- if( vTextLine.at( 0 ) == 27 )
- {
- CMIUtilString logInput( MIRSRC( IDS_STDIN_INPUT_CTRL_CHARS ) );
- for( MIuint i = 0; i < vTextLine.length(); i++ )
- {
- logInput += CMIUtilString::Format( "%d ", vTextLine.at( i ) );
- }
- m_pLog->WriteLog( logInput );
- return MIstatus::success;
- }
-
- // Write to the Log that a 'command' was not valid.
- // Report back to the MI client via MI result record.
- CMIUtilString strNotInCmdFactory;
- if( bCmdNotInCmdFactor )
- strNotInCmdFactory = CMIUtilString::Format( MIRSRC( IDS_DRIVER_CMD_NOT_IN_FACTORY ), cmdData.strMiCmd.c_str() );
- const CMIUtilString strNot( CMIUtilString::Format( "%s ", MIRSRC( IDS_WORD_NOT ) ) );
- const CMIUtilString msg( CMIUtilString::Format( MIRSRC( IDS_DRIVER_CMD_RECEIVED ), vTextLine.c_str(), strNot.c_str(), strNotInCmdFactory.c_str() ) );
- const CMICmnMIValueConst vconst = CMICmnMIValueConst( msg );
- const CMICmnMIValueResult valueResult( "msg", vconst );
- const CMICmnMIResultRecord miResultRecord( cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error, valueResult );
- m_rStdOut.WriteMIResponse( miResultRecord.GetString() );
-
- // Proceed to wait for or execute next command
- return MIstatus::success;
+ vwbCmdYesValid = false;
+
+ bool bCmdNotInCmdFactor = false;
+ SMICmdData cmdData;
+ CMICmdMgr &rCmdMgr = CMICmdMgr::Instance();
+ if (!rCmdMgr.CmdInterpret(vTextLine, vwbCmdYesValid, bCmdNotInCmdFactor, cmdData))
+ return MIstatus::failure;
+
+ if (vwbCmdYesValid)
+ {
+ // For debugging only
+ // m_pLog->WriteLog( cmdData.strMiCmdAll.c_str() );
+
+ return ExecuteCommand(cmdData);
+ }
+
+ // Check for escape character, may be cursor control characters
+ // This code is not necessary for application operation, just want to keep tabs on what
+ // is been given to the driver to try and intepret.
+ if (vTextLine.at(0) == 27)
+ {
+ CMIUtilString logInput(MIRSRC(IDS_STDIN_INPUT_CTRL_CHARS));
+ for (MIuint i = 0; i < vTextLine.length(); i++)
+ {
+ logInput += CMIUtilString::Format("%d ", vTextLine.at(i));
+ }
+ m_pLog->WriteLog(logInput);
+ return MIstatus::success;
+ }
+
+ // Write to the Log that a 'command' was not valid.
+ // Report back to the MI client via MI result record.
+ CMIUtilString strNotInCmdFactory;
+ if (bCmdNotInCmdFactor)
+ strNotInCmdFactory = CMIUtilString::Format(MIRSRC(IDS_DRIVER_CMD_NOT_IN_FACTORY), cmdData.strMiCmd.c_str());
+ const CMIUtilString strNot(CMIUtilString::Format("%s ", MIRSRC(IDS_WORD_NOT)));
+ const CMIUtilString msg(
+ CMIUtilString::Format(MIRSRC(IDS_DRIVER_CMD_RECEIVED), vTextLine.c_str(), strNot.c_str(), strNotInCmdFactory.c_str()));
+ const CMICmnMIValueConst vconst = CMICmnMIValueConst(msg);
+ const CMICmnMIValueResult valueResult("msg", vconst);
+ const CMICmnMIResultRecord miResultRecord(cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error, valueResult);
+ m_rStdOut.WriteMIResponse(miResultRecord.GetString());
+
+ // Proceed to wait for or execute next command
+ return MIstatus::success;
}
//++ ------------------------------------------------------------------------------------
-// Details: Having previously had the potential command validated and found valid now
-// get the command executed.
-// This function is used by the application's main thread.
-// Type: Method.
-// Args: vCmdData - (RW) Command meta data.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
+// Details: Having previously had the potential command validated and found valid now
+// get the command executed.
+// This function is used by the application's main thread.
+// Type: Method.
+// Args: vCmdData - (RW) Command meta data.
+// Return: MIstatus::success - Functional succeeded.
+// MIstatus::failure - Functional failed.
+// Throws: None.
//--
-bool CMIDriver::ExecuteCommand( const SMICmdData & vCmdData )
+bool
+CMIDriver::ExecuteCommand(const SMICmdData &vCmdData)
{
- CMICmdMgr & rCmdMgr = CMICmdMgr::Instance();
- return rCmdMgr.CmdExecute( vCmdData );
+ CMICmdMgr &rCmdMgr = CMICmdMgr::Instance();
+ return rCmdMgr.CmdExecute(vCmdData);
}
//++ ------------------------------------------------------------------------------------
-// Details: Set the MI Driver's exit application flag. The application checks this flag
-// after every stdin line is read so the exit may not be instantaneous.
-// If vbForceExit is false the MI Driver queries its state and determines if is
-// should exit or continue operating depending on that running state.
-// This is related to the running state of the MI driver.
-// Type: Overridden.
-// Args: None.
-// Return: None.
-// Throws: None.
+// Details: Set the MI Driver's exit application flag. The application checks this flag
+// after every stdin line is read so the exit may not be instantaneous.
+// If vbForceExit is false the MI Driver queries its state and determines if is
+// should exit or continue operating depending on that running state.
+// This is related to the running state of the MI driver.
+// Type: Overridden.
+// Args: None.
+// Return: None.
+// Throws: None.
//--
-void CMIDriver::SetExitApplicationFlag( const bool vbForceExit )
+void
+CMIDriver::SetExitApplicationFlag(const bool vbForceExit)
{
- if( vbForceExit )
- {
- CMIUtilThreadLock lock( m_threadMutex );
- m_bExitApp = true;
- return;
- }
-
- // CODETAG_DEBUG_SESSION_RUNNING_PROG_RECEIVED_SIGINT_PAUSE_PROGRAM
- // Did we receive a SIGINT from the client during a running debug program, if
- // so then SIGINT is not to be taken as meaning kill the MI driver application
- // but halt the inferior program being debugged instead
- if( m_eCurrentDriverState == eDriverState_RunningDebugging )
- {
- InjectMICommand( "-exec-interrupt" );
- return;
- }
-
- m_bExitApp = true;
+ if (vbForceExit)
+ {
+ CMIUtilThreadLock lock(m_threadMutex);
+ m_bExitApp = true;
+ m_rStdin.OnExitHandler();
+ return;
+ }
+
+ // CODETAG_DEBUG_SESSION_RUNNING_PROG_RECEIVED_SIGINT_PAUSE_PROGRAM
+ // Did we receive a SIGINT from the client during a running debug program, if
+ // so then SIGINT is not to be taken as meaning kill the MI driver application
+ // but halt the inferior program being debugged instead
+ if (m_eCurrentDriverState == eDriverState_RunningDebugging)
+ {
+ InjectMICommand("-exec-interrupt");
+ return;
+ }
+
+ m_bExitApp = true;
+ m_rStdin.OnExitHandler();
}
//++ ------------------------------------------------------------------------------------
-// Details: Get the MI Driver's exit exit application flag.
-// This is related to the running state of the MI driver.
-// Type: Method.
-// Args: None.
-// Return: bool - True = MI Driver is shutting down, false = MI driver is running.
-// Throws: None.
+// Details: Get the MI Driver's exit exit application flag.
+// This is related to the running state of the MI driver.
+// Type: Method.
+// Args: None.
+// Return: bool - True = MI Driver is shutting down, false = MI driver is running.
+// Throws: None.
//--
-bool CMIDriver::GetExitApplicationFlag( void ) const
+bool
+CMIDriver::GetExitApplicationFlag(void) const
{
- return m_bExitApp;
+ return m_bExitApp;
}
//++ ------------------------------------------------------------------------------------
-// Details: Get the current running state of the MI Driver.
-// Type: Method.
-// Args: None.
-// Return: DriverState_e - The current running state of the application.
-// Throws: None.
+// Details: Get the current running state of the MI Driver.
+// Type: Method.
+// Args: None.
+// Return: DriverState_e - The current running state of the application.
+// Throws: None.
//--
-CMIDriver::DriverState_e CMIDriver::GetCurrentDriverState( void ) const
+CMIDriver::DriverState_e
+CMIDriver::GetCurrentDriverState(void) const
{
- return m_eCurrentDriverState;
+ return m_eCurrentDriverState;
}
//++ ------------------------------------------------------------------------------------
-// Details: Set the current running state of the MI Driver to running and currently not in
-// a debug session.
-// Type: Method.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Return: DriverState_e - The current running state of the application.
-// Throws: None.
+// Details: Set the current running state of the MI Driver to running and currently not in
+// a debug session.
+// Type: Method.
+// Return: MIstatus::success - Functionality succeeded.
+// MIstatus::failure - Functionality failed.
+// Return: DriverState_e - The current running state of the application.
+// Throws: None.
//--
-bool CMIDriver::SetDriverStateRunningNotDebugging( void )
+bool
+CMIDriver::SetDriverStateRunningNotDebugging(void)
{
- // CODETAG_DEBUG_SESSION_RUNNING_PROG_RECEIVED_SIGINT_PAUSE_PROGRAM
-
- if( m_eCurrentDriverState == eDriverState_RunningNotDebugging )
- return MIstatus::success;
-
- // Driver cannot be in the following states to set eDriverState_RunningNotDebugging
- switch( m_eCurrentDriverState )
- {
- case eDriverState_NotRunning:
- case eDriverState_Initialising:
- case eDriverState_ShuttingDown:
- {
- SetErrorDescription( MIRSRC( IDS_DRIVER_ERR_DRIVER_STATE_ERROR ) );
- return MIstatus::failure;
- }
- case eDriverState_RunningDebugging:
- case eDriverState_RunningNotDebugging:
- break;
- case eDriverState_count:
- default:
- SetErrorDescription( CMIUtilString::Format( MIRSRC( IDS_CODE_ERR_INVALID_ENUMERATION_VALUE ), "SetDriverStateRunningNotDebugging()" ) );
- return MIstatus::failure;
- }
-
- // Driver must be in this state to set eDriverState_RunningNotDebugging
- if( m_eCurrentDriverState != eDriverState_RunningDebugging )
- {
- SetErrorDescription( MIRSRC( IDS_DRIVER_ERR_DRIVER_STATE_ERROR ) );
- return MIstatus::failure;
- }
-
- m_eCurrentDriverState = eDriverState_RunningNotDebugging;
-
- return MIstatus::success;
+ // CODETAG_DEBUG_SESSION_RUNNING_PROG_RECEIVED_SIGINT_PAUSE_PROGRAM
+
+ if (m_eCurrentDriverState == eDriverState_RunningNotDebugging)
+ return MIstatus::success;
+
+ // Driver cannot be in the following states to set eDriverState_RunningNotDebugging
+ switch (m_eCurrentDriverState)
+ {
+ case eDriverState_NotRunning:
+ case eDriverState_Initialising:
+ case eDriverState_ShuttingDown:
+ {
+ SetErrorDescription(MIRSRC(IDS_DRIVER_ERR_DRIVER_STATE_ERROR));
+ return MIstatus::failure;
+ }
+ case eDriverState_RunningDebugging:
+ case eDriverState_RunningNotDebugging:
+ break;
+ case eDriverState_count:
+ SetErrorDescription(
+ CMIUtilString::Format(MIRSRC(IDS_CODE_ERR_INVALID_ENUMERATION_VALUE), "SetDriverStateRunningNotDebugging()"));
+ return MIstatus::failure;
+ }
+
+ // Driver must be in this state to set eDriverState_RunningNotDebugging
+ if (m_eCurrentDriverState != eDriverState_RunningDebugging)
+ {
+ SetErrorDescription(MIRSRC(IDS_DRIVER_ERR_DRIVER_STATE_ERROR));
+ return MIstatus::failure;
+ }
+
+ m_eCurrentDriverState = eDriverState_RunningNotDebugging;
+
+ return MIstatus::success;
}
//++ ------------------------------------------------------------------------------------
-// Details: Set the current running state of the MI Driver to running and currently not in
-// a debug session. The driver's state must in the state running and in a
-// debug session to set this new state.
-// Type: Method.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Return: DriverState_e - The current running state of the application.
-// Throws: None.
+// Details: Set the current running state of the MI Driver to running and currently not in
+// a debug session. The driver's state must in the state running and in a
+// debug session to set this new state.
+// Type: Method.
+// Return: MIstatus::success - Functionality succeeded.
+// MIstatus::failure - Functionality failed.
+// Return: DriverState_e - The current running state of the application.
+// Throws: None.
//--
-bool CMIDriver::SetDriverStateRunningDebugging( void )
+bool
+CMIDriver::SetDriverStateRunningDebugging(void)
{
- // CODETAG_DEBUG_SESSION_RUNNING_PROG_RECEIVED_SIGINT_PAUSE_PROGRAM
-
- if( m_eCurrentDriverState == eDriverState_RunningDebugging )
- return MIstatus::success;
-
- // Driver cannot be in the following states to set eDriverState_RunningDebugging
- switch( m_eCurrentDriverState )
- {
- case eDriverState_NotRunning:
- case eDriverState_Initialising:
- case eDriverState_ShuttingDown:
- {
- SetErrorDescription( MIRSRC( IDS_DRIVER_ERR_DRIVER_STATE_ERROR ) );
- return MIstatus::failure;
- }
- case eDriverState_RunningDebugging:
- case eDriverState_RunningNotDebugging:
- break;
- case eDriverState_count:
- default:
- SetErrorDescription( CMIUtilString::Format( MIRSRC( IDS_CODE_ERR_INVALID_ENUMERATION_VALUE ), "SetDriverStateRunningDebugging()" ) );
- return MIstatus::failure;
- }
-
- // Driver must be in this state to set eDriverState_RunningDebugging
- if( m_eCurrentDriverState != eDriverState_RunningNotDebugging )
- {
- SetErrorDescription( MIRSRC( IDS_DRIVER_ERR_DRIVER_STATE_ERROR ) );
- return MIstatus::failure;
- }
-
- m_eCurrentDriverState = eDriverState_RunningDebugging;
-
- return MIstatus::success;
+ // CODETAG_DEBUG_SESSION_RUNNING_PROG_RECEIVED_SIGINT_PAUSE_PROGRAM
+
+ if (m_eCurrentDriverState == eDriverState_RunningDebugging)
+ return MIstatus::success;
+
+ // Driver cannot be in the following states to set eDriverState_RunningDebugging
+ switch (m_eCurrentDriverState)
+ {
+ case eDriverState_NotRunning:
+ case eDriverState_Initialising:
+ case eDriverState_ShuttingDown:
+ {
+ SetErrorDescription(MIRSRC(IDS_DRIVER_ERR_DRIVER_STATE_ERROR));
+ return MIstatus::failure;
+ }
+ case eDriverState_RunningDebugging:
+ case eDriverState_RunningNotDebugging:
+ break;
+ case eDriverState_count:
+ SetErrorDescription(CMIUtilString::Format(MIRSRC(IDS_CODE_ERR_INVALID_ENUMERATION_VALUE), "SetDriverStateRunningDebugging()"));
+ return MIstatus::failure;
+ }
+
+ // Driver must be in this state to set eDriverState_RunningDebugging
+ if (m_eCurrentDriverState != eDriverState_RunningNotDebugging)
+ {
+ SetErrorDescription(MIRSRC(IDS_DRIVER_ERR_DRIVER_STATE_ERROR));
+ return MIstatus::failure;
+ }
+
+ m_eCurrentDriverState = eDriverState_RunningDebugging;
+
+ return MIstatus::success;
}
//++ ------------------------------------------------------------------------------------
-// Details: Prepare the client IDE so it will start working/communicating with *this MI
-// driver.
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
+// Details: Prepare the client IDE so it will start working/communicating with *this MI
+// driver.
+// Type: Method.
+// Args: None.
+// Return: MIstatus::success - Functionality succeeded.
+// MIstatus::failure - Functionality failed.
+// Throws: None.
//--
-bool CMIDriver::InitClientIDEToMIDriver( void ) const
+bool
+CMIDriver::InitClientIDEToMIDriver(void) const
{
- // Put other IDE init functions here
- return InitClientIDEEclipse();
+ // Put other IDE init functions here
+ return InitClientIDEEclipse();
}
//++ ------------------------------------------------------------------------------------
// Details: The IDE Eclipse when debugging locally expects "(gdb)\n" character
-// sequence otherwise it refuses to communicate and times out. This should be
-// sent to Eclipse before anything else.
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
+// sequence otherwise it refuses to communicate and times out. This should be
+// sent to Eclipse before anything else.
+// Type: Method.
+// Args: None.
+// Return: MIstatus::success - Functionality succeeded.
+// MIstatus::failure - Functionality failed.
+// Throws: None.
//--
-bool CMIDriver::InitClientIDEEclipse( void ) const
+bool
+CMIDriver::InitClientIDEEclipse(void) const
{
- std::cout << "(gdb)" << std::endl;
+ std::cout << "(gdb)" << std::endl;
- return MIstatus::success;
+ return MIstatus::success;
}
//++ ------------------------------------------------------------------------------------
-// Details: Ask *this driver whether it found an executable in the MI Driver's list of
-// arguments which to open and debug. If so instigate commands to set up a debug
-// session for that executable.
-// Type: Method.
-// Args: None.
-// Return: bool - True = True = Yes executable given as one of the parameters to the MI
-// Driver.
-// False = not found.
-// Throws: None.
+// Details: Ask *this driver whether it found an executable in the MI Driver's list of
+// arguments which to open and debug. If so instigate commands to set up a debug
+// session for that executable.
+// Type: Method.
+// Args: None.
+// Return: bool - True = True = Yes executable given as one of the parameters to the MI
+// Driver.
+// False = not found.
+// Throws: None.
//--
-bool CMIDriver::HaveExecutableFileNamePathOnCmdLine( void ) const
+bool
+CMIDriver::HaveExecutableFileNamePathOnCmdLine(void) const
{
- return m_bHaveExecutableFileNamePathOnCmdLine;
+ return m_bHaveExecutableFileNamePathOnCmdLine;
}
//++ ------------------------------------------------------------------------------------
// Details: Retrieve from *this driver executable file name path to start a debug session
-// with (if present see HaveExecutableFileNamePathOnCmdLine()).
-// Type: Method.
-// Args: None.
-// Return: CMIUtilString & - Executeable file name path or empty string.
-// Throws: None.
+// with (if present see HaveExecutableFileNamePathOnCmdLine()).
+// Type: Method.
+// Args: None.
+// Return: CMIUtilString & - Executeable file name path or empty string.
+// Throws: None.
//--
-const CMIUtilString & CMIDriver::GetExecutableFileNamePathOnCmdLine( void ) const
+const CMIUtilString &
+CMIDriver::GetExecutableFileNamePathOnCmdLine(void) const
{
- return m_strCmdLineArgExecuteableFileNamePath;
+ return m_strCmdLineArgExecuteableFileNamePath;
}
//++ ------------------------------------------------------------------------------------
// Details: Execute commands (by injecting them into the stdin line queue container) and
-// other code to set up the MI Driver such that is can take the executable
-// argument passed on the command and create a debug session for it.
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
+// other code to set up the MI Driver such that is can take the executable
+// argument passed on the command and create a debug session for it.
+// Type: Method.
+// Args: None.
+// Return: MIstatus::success - Functionality succeeded.
+// MIstatus::failure - Functionality failed.
+// Throws: None.
//--
-bool CMIDriver::LocalDebugSessionStartupInjectCommands( void )
+bool
+CMIDriver::LocalDebugSessionStartupInjectCommands(void)
{
- const CMIUtilString strCmd( CMIUtilString::Format( "-file-exec-and-symbols %s", m_strCmdLineArgExecuteableFileNamePath.c_str() ) );
-
- return InjectMICommand( strCmd );
+ const CMIUtilString strCmd(CMIUtilString::Format("-file-exec-and-symbols %s", m_strCmdLineArgExecuteableFileNamePath.c_str()));
+
+ return InjectMICommand(strCmd);
}
//++ ------------------------------------------------------------------------------------
// Details: Set the MI Driver into "its debugging an executable passed as an argument"
-// mode as against running via a client like Eclipse.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
+// mode as against running via a client like Eclipse.
+// Type: Method.
+// Args: None.
+// Return: None.
+// Throws: None.
//--
-void CMIDriver::SetDriverDebuggingArgExecutable( void )
+void
+CMIDriver::SetDriverDebuggingArgExecutable(void)
{
- m_bDriverDebuggingArgExecutable = true;
+ m_bDriverDebuggingArgExecutable = true;
}
//++ ------------------------------------------------------------------------------------
-// Details: Retrieve the MI Driver state indicating if it is operating in "its debugging
-// an executable passed as an argument" mode as against running via a client
-// like Eclipse.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
+// Details: Retrieve the MI Driver state indicating if it is operating in "its debugging
+// an executable passed as an argument" mode as against running via a client
+// like Eclipse.
+// Type: Method.
+// Args: None.
+// Return: None.
+// Throws: None.
//--
-bool CMIDriver::IsDriverDebuggingArgExecutable( void ) const
+bool
+CMIDriver::IsDriverDebuggingArgExecutable(void) const
{
- return m_bDriverDebuggingArgExecutable;
+ return m_bDriverDebuggingArgExecutable;
}
-