[Lldb-commits] [lldb] r215656 - Implementation of exec-run using lldb API.
Hafiz Abid Qadeer
hafiz_abid at mentor.com
Thu Aug 14 09:40:27 PDT 2014
Author: abidh
Date: Thu Aug 14 11:40:27 2014
New Revision: 215656
URL: http://llvm.org/viewvc/llvm-project?rev=215656&view=rev
Log:
Implementation of exec-run using lldb API.
Previously it was using run command which did not set the process
pointer in the sessionInfo. This commit also sends the proper
out-of-band data.
Modified:
lldb/trunk/tools/lldb-mi/MICmdCmdExec.cpp
Modified: lldb/trunk/tools/lldb-mi/MICmdCmdExec.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdExec.cpp?rev=215656&r1=215655&r2=215656&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdExec.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdExec.cpp Thu Aug 14 11:40:27 2014
@@ -28,6 +28,9 @@
// Third Party Headers:
#include <lldb/API/SBCommandInterpreter.h>
+#include <lldb/API/SBProcess.h>
+#include <lldb/API/SBStream.h>
+#include "lldb/lldb-enumerations.h"
// In-house headers:
#include "MICmdCmdExec.h"
@@ -83,20 +86,29 @@ CMICmdCmdExecRun::~CMICmdCmdExecRun( voi
//--
bool CMICmdCmdExecRun::Execute( void )
{
- const MIchar * pCmd = "run";
CMICmnLLDBDebugSessionInfo & rSessionInfo( CMICmnLLDBDebugSessionInfo::Instance() );
- const lldb::ReturnStatus rtn = rSessionInfo.m_rLldbDebugger.GetCommandInterpreter().HandleCommand( pCmd, m_lldbResult ); MIunused( rtn );
-
- if( m_lldbResult.GetErrorSize() == 0 )
+ lldb::SBError error;
+ lldb::SBStream errMsg;
+ uint32_t launch_flags = lldb::LaunchFlags::eLaunchFlagDebug;
+ lldb::SBProcess process = rSessionInfo.m_lldbTarget.Launch (rSessionInfo.m_rLlldbListener,
+ nullptr, nullptr, nullptr, nullptr, nullptr,
+ nullptr, launch_flags, false, error);
+
+ if( (!process.IsValid()) || (error.Fail()) )
{
- if( !CMIDriver::Instance().SetDriverStateRunningDebugging() )
- {
- const CMIUtilString & rErrMsg( CMIDriver::Instance().GetErrorDescription() );
- SetError( CMIUtilString::Format( MIRSRC( IDS_CMD_ERR_SET_NEW_DRIVER_STATE ), m_cmdData.strMiCmd.c_str(), rErrMsg.c_str() ) );
- return MIstatus::failure;
- }
+ SetError( CMIUtilString::Format( MIRSRC( IDS_CMD_ERR_INVALID_PROCESS ), m_cmdData.strMiCmd.c_str(), errMsg.GetData() ) );
+ return MIstatus::failure;
}
+ // Save the process in the session info
+ rSessionInfo.m_lldbProcess = process;
+
+ if( !CMIDriver::Instance().SetDriverStateRunningDebugging() )
+ {
+ const CMIUtilString & rErrMsg( CMIDriver::Instance().GetErrorDescription() );
+ SetError( CMIUtilString::Format( MIRSRC( IDS_CMD_ERR_SET_NEW_DRIVER_STATE ), m_cmdData.strMiCmd.c_str(), rErrMsg.c_str() ) );
+ return MIstatus::failure;
+ }
return MIstatus::success;
}
@@ -122,6 +134,19 @@ bool CMICmdCmdExecRun::Acknowledge( void
{
const CMICmnMIResultRecord miRecordResult( m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Running );
m_miResultRecord = miRecordResult;
+
+ CMICmnLLDBDebugSessionInfo & rSessionInfo( CMICmnLLDBDebugSessionInfo::Instance() );
+ lldb::pid_t pid = rSessionInfo.m_lldbProcess.GetProcessID();
+ // Give the client '=thread-group-started,id="i1" pid="xyz"'
+ m_bHasResultRecordExtra = true;
+ const CMICmnMIValueConst miValueConst2( "i1" );
+ const CMICmnMIValueResult miValueResult2( "id", miValueConst2 );
+ const CMIUtilString strPid( CMIUtilString::Format( "%lld", pid ) );
+ const CMICmnMIValueConst miValueConst( strPid );
+ const CMICmnMIValueResult miValueResult( "pid", miValueConst );
+ CMICmnMIOutOfBandRecord miOutOfBand( CMICmnMIOutOfBandRecord::eOutOfBand_ThreadGroupStarted, miValueResult2 );
+ miOutOfBand.Add( miValueResult );
+ m_miResultRecordExtra = miOutOfBand.GetString();
}
return MIstatus::success;
More information about the lldb-commits
mailing list