forked from OSchip/llvm-project
[lldb-mi] Add possibility to set breakpoints without selecting a target.
Now it's possible to set breakpoints before selecting a target, they will be set to the dummy target and then copied to an each added one. Patch by Alexander Polyakov! Differential Revision: https://reviews.llvm.org/D46588 llvm-svn: 333205
This commit is contained in:
parent
e790f6fb06
commit
512ccd7e6f
|
@ -58,6 +58,8 @@ debugserver = lit.util.which('debugserver', lldb_tools_dir)
|
|||
lldb = "%s -S %s/lit-lldb-init" % (lit.util.which('lldb', lldb_tools_dir),
|
||||
config.test_source_root)
|
||||
|
||||
lldbmi = lit.util.which('lldb-mi', lldb_tools_dir)
|
||||
|
||||
if not os.path.exists(config.cc):
|
||||
config.cc = lit.util.which(config.cc, config.environment['PATH'])
|
||||
|
||||
|
@ -79,6 +81,7 @@ if platform.system() in ['Darwin']:
|
|||
config.substitutions.append(('%cc', config.cc))
|
||||
config.substitutions.append(('%cxx', config.cxx))
|
||||
|
||||
config.substitutions.append(('%lldbmi', lldbmi + " --synchronous"))
|
||||
config.substitutions.append(('%lldb', lldb))
|
||||
|
||||
if debugserver is not None:
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
# RUN: %cc %p/inputs/break-insert.c -g
|
||||
# RUN: %lldbmi < %s | FileCheck %s
|
||||
|
||||
# Test that a breakpoint can be inserted before creating a target.
|
||||
|
||||
-break-insert breakpoint
|
||||
# CHECK: ^done,bkpt={number="1"
|
||||
|
||||
-file-exec-and-symbols a.out
|
||||
# CHECK: ^done
|
||||
|
||||
-exec-run
|
||||
# CHECK: ^running
|
||||
# CHECK: *stopped,reason="breakpoint-hit"
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
int breakpoint() { // Breakpoint will be set here.
|
||||
return 0;
|
||||
}
|
||||
|
||||
int main() {
|
||||
return breakpoint();
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
config.suffixes = ['.test']
|
|
@ -148,6 +148,11 @@ bool CMICmdCmdBreakInsert::Execute() {
|
|||
CMICMDBASE_GETOPTION(pArgRestrictBrkPtToThreadId, OptionShort,
|
||||
m_constStrArgNamedRestrictBrkPtToThreadId);
|
||||
|
||||
// Ask LLDB for the target to check if we have valid or dummy one.
|
||||
CMICmnLLDBDebugSessionInfo &rSessionInfo(
|
||||
CMICmnLLDBDebugSessionInfo::Instance());
|
||||
lldb::SBTarget sbTarget = rSessionInfo.GetTarget();
|
||||
|
||||
m_bBrkPtEnabled = !pArgDisableBrkPt->GetFound();
|
||||
m_bBrkPtIsTemp = pArgTempBrkPt->GetFound();
|
||||
m_bHaveArgOptionThreadGrp = pArgThreadGroup->GetFound();
|
||||
|
@ -157,7 +162,12 @@ bool CMICmdCmdBreakInsert::Execute() {
|
|||
nThreadGrp);
|
||||
m_strArgOptionThreadGrp = CMIUtilString::Format("i%d", nThreadGrp);
|
||||
}
|
||||
m_bBrkPtIsPending = pArgPendingBrkPt->GetFound();
|
||||
|
||||
if (sbTarget == rSessionInfo.GetDebugger().GetDummyTarget())
|
||||
m_bBrkPtIsPending = true;
|
||||
else
|
||||
m_bBrkPtIsPending = pArgPendingBrkPt->GetFound();
|
||||
|
||||
if (pArgLocation->GetFound())
|
||||
m_brkName = pArgLocation->GetValue();
|
||||
else if (m_bBrkPtIsPending) {
|
||||
|
@ -225,9 +235,6 @@ bool CMICmdCmdBreakInsert::Execute() {
|
|||
|
||||
// Ask LLDB to create a breakpoint
|
||||
bool bOk = MIstatus::success;
|
||||
CMICmnLLDBDebugSessionInfo &rSessionInfo(
|
||||
CMICmnLLDBDebugSessionInfo::Instance());
|
||||
lldb::SBTarget sbTarget = rSessionInfo.GetTarget();
|
||||
switch (eBrkPtType) {
|
||||
case eBreakPoint_ByAddress:
|
||||
m_brkPt = sbTarget.BreakpointCreateByAddress(nAddress);
|
||||
|
|
|
@ -871,7 +871,10 @@ lldb::SBListener &CMICmnLLDBDebugSessionInfo::GetListener() const {
|
|||
// Throws: None.
|
||||
//--
|
||||
lldb::SBTarget CMICmnLLDBDebugSessionInfo::GetTarget() const {
|
||||
return GetDebugger().GetSelectedTarget();
|
||||
auto target = GetDebugger().GetSelectedTarget();
|
||||
if (target.IsValid())
|
||||
return target;
|
||||
return GetDebugger().GetDummyTarget();
|
||||
}
|
||||
|
||||
//++
|
||||
|
|
Loading…
Reference in New Issue