forked from OSchip/llvm-project
Fix handling of CommandInterpreter's events in lldb-mi
Summary: Previously lldb-mi contains a stub for that but it didn't work and all CommanInterpreter's events were ignored. This commit adds a handling of CommandInterpreter's events in lldb-mi. Steps: # Fix CMICmnLLDBDebugger::InitSBListener # Add SBCommandInterpreter::EventIsCommandInterpreterEvent # Exit on lldb::SBCommandInterpreter::eBroadcastBitQuitCommandReceived All tests pass on OS X. In further we can remove "quit" hack in lldb-mi. Test Plan: # Create start_script file: ``` target create ~/p/hello b main r quit ``` # Run lldb-mi --interpreter # Execute start_script file by following command: ``` -interpreter-exec console "command source start_script" ``` Log: ``` $ bin/lldb-mi --interpreter (gdb) -interpreter-exec console "command source start_script" Executing commands in '/Users/IliaK/p/llvm/build_ninja/start_script'. (lldb) target create ~/p/hello Current executable set to '~/p/hello' (x86_64). (lldb) b main Breakpoint 1: where = hello`main + 29 at hello.cpp:12, address = 0x0000000100000e2d (lldb) r Process 1582 launched: '/Users/IliaK/p/hello' (x86_64) (lldb) quit ^done (gdb) =thread-created,id="1",group-id="i1" =thread-selected,id="1" (gdb) =shlibs-added,shlib-info=[num="1",name="hello",dyld-addr="-",reason="dyld",path="/Users/IliaK/p/hello",loaded_addr="-",dsym-objpath="/Users/IliaK/p/hello.dSYM/Contents/Resources/DWARF/hello"] ... =shlibs-added,shlib-info=[num="132",name="libDiagnosticMessagesClient.dylib",dyld-addr="0x7fff91705000",reason="dyld",path="/usr/lib/libDiagnosticMessagesClient.dylib",loaded_addr="0x7fff91705000"] (gdb) *stopped,reason="breakpoint-hit",disp="del",bkptno="1",frame={addr="0x100000e2d",func="main",args=[{name="argc",value="1"},{name="argv",value="0x00007fff5fbffc88"}],file="hello.cpp",fullname="/Users/IliaK/p/hello.cpp",line="12"},thread-id="1",stopped-threads="all" (gdb)<press Enter> MI: Program exited OK ``` Reviewers: abidh, clayborg Reviewed By: abidh Subscribers: jingham, lldb-commits, clayborg, abidh Differential Revision: http://reviews.llvm.org/D8382 llvm-svn: 232891
This commit is contained in:
parent
3276a27b5c
commit
af10e1ce6f
|
@ -94,6 +94,9 @@ public:
|
|||
|
||||
static const char *
|
||||
GetArgumentDescriptionAsCString (const lldb::CommandArgumentType arg_type);
|
||||
|
||||
static bool
|
||||
EventIsCommandInterpreterEvent (const lldb::SBEvent &event);
|
||||
|
||||
bool
|
||||
IsValid() const;
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
#include "lldb/API/SBBroadcaster.h"
|
||||
#include "lldb/API/SBCommandReturnObject.h"
|
||||
#include "lldb/API/SBCommandInterpreter.h"
|
||||
#include "lldb/API/SBEvent.h"
|
||||
#include "lldb/API/SBExecutionContext.h"
|
||||
#include "lldb/API/SBProcess.h"
|
||||
#include "lldb/API/SBTarget.h"
|
||||
|
@ -547,6 +548,12 @@ SBCommandInterpreter::GetArgumentDescriptionAsCString (const lldb::CommandArgume
|
|||
return CommandObject::GetArgumentDescriptionAsCString (arg_type);
|
||||
}
|
||||
|
||||
bool
|
||||
SBCommandInterpreter::EventIsCommandInterpreterEvent (const lldb::SBEvent &event)
|
||||
{
|
||||
return strcmp (event.GetBroadcasterClass(), SBCommandInterpreter::GetBroadcasterClass()) == 0;
|
||||
}
|
||||
|
||||
bool
|
||||
SBCommandInterpreter::SetCommandOverrideCallback (const char *command_name,
|
||||
lldb::CommandOverrideCallback callback,
|
||||
|
|
|
@ -296,7 +296,7 @@ CMICmnLLDBDebugger::InitSBListener(void)
|
|||
eventMask = lldb::SBCommandInterpreter::eBroadcastBitQuitCommandReceived | lldb::SBCommandInterpreter::eBroadcastBitThreadShouldExit |
|
||||
lldb::SBCommandInterpreter::eBroadcastBitAsynchronousOutputData |
|
||||
lldb::SBCommandInterpreter::eBroadcastBitAsynchronousErrorData;
|
||||
bOk = bOk && RegisterForEvent(strDbgId, CMIUtilString(lldb::SBCommandInterpreter::GetBroadcasterClass()), eventMask);
|
||||
bOk = bOk && RegisterForEvent(strDbgId, m_lldbDebugger.GetCommandInterpreter().GetBroadcaster(), eventMask);
|
||||
|
||||
return bOk;
|
||||
}
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
#include "MICmnLLDBDebuggerHandleEvents.h"
|
||||
#include "MICmnResources.h"
|
||||
#include "MICmnLog.h"
|
||||
#include "MICmnLLDBDebugger.h"
|
||||
#include "MICmnLLDBDebugSessionInfo.h"
|
||||
#include "MICmnMIResultRecord.h"
|
||||
#include "MICmnMIValueConst.h"
|
||||
|
@ -146,6 +147,11 @@ CMICmnLLDBDebuggerHandleEvents::HandleEvent(const lldb::SBEvent &vEvent, bool &v
|
|||
vrbHandledEvent = true;
|
||||
bOk = HandleEventSBTarget(vEvent);
|
||||
}
|
||||
else if (lldb::SBCommandInterpreter::EventIsCommandInterpreterEvent(vEvent))
|
||||
{
|
||||
vrbHandledEvent = true;
|
||||
bOk = HandleEventSBCommandInterpreter(vEvent);
|
||||
}
|
||||
|
||||
return bOk;
|
||||
}
|
||||
|
@ -756,8 +762,12 @@ CMICmnLLDBDebuggerHandleEvents::HandleEventSBCommandInterpreter(const lldb::SBEv
|
|||
pEventType = "eBroadcastBitResetPrompt";
|
||||
break;
|
||||
case lldb::SBCommandInterpreter::eBroadcastBitQuitCommandReceived:
|
||||
{
|
||||
pEventType = "eBroadcastBitQuitCommandReceived";
|
||||
const bool bForceExit = true;
|
||||
CMICmnLLDBDebugger::Instance().GetDriver().SetExitApplicationFlag(bForceExit);
|
||||
break;
|
||||
}
|
||||
case lldb::SBCommandInterpreter::eBroadcastBitAsynchronousOutputData:
|
||||
pEventType = "eBroadcastBitAsynchronousOutputData";
|
||||
break;
|
||||
|
|
Loading…
Reference in New Issue