forked from OSchip/llvm-project
Reset continue_after_async only if neither SIGINIT nor SIGSTOP received.
http://reviews.llvm.org/D18886 llvm-svn: 265843
This commit is contained in:
parent
3232dbbf02
commit
bdea8dd57f
|
@ -0,0 +1,5 @@
|
|||
LEVEL = ../../../make
|
||||
|
||||
CXX_SOURCES := main.cpp
|
||||
|
||||
include $(LEVEL)/Makefile.rules
|
|
@ -0,0 +1,37 @@
|
|||
"""
|
||||
Test inferior restart when breakpoint is set on running target.
|
||||
"""
|
||||
|
||||
import os
|
||||
import lldb
|
||||
from lldbsuite.test.lldbtest import *
|
||||
from lldbsuite.test import lldbutil
|
||||
|
||||
class BreakpointSetRestart(TestBase):
|
||||
|
||||
mydir = TestBase.compute_mydir(__file__)
|
||||
BREAKPOINT_TEXT = 'Set a breakpoint here'
|
||||
|
||||
def test_breakpoint_set_restart(self):
|
||||
self.build()
|
||||
|
||||
cwd = self.get_process_working_directory()
|
||||
exe = os.path.join(cwd, "a.out")
|
||||
target = self.dbg.CreateTarget(exe)
|
||||
|
||||
self.dbg.SetAsync(True)
|
||||
process = target.LaunchSimple(None, None, cwd)
|
||||
|
||||
lldbutil.expect_state_changes(self, self.dbg.GetListener(), [lldb.eStateRunning])
|
||||
bp = target.BreakpointCreateBySourceRegex(self.BREAKPOINT_TEXT,
|
||||
lldb.SBFileSpec(os.path.join(cwd, 'main.cpp')))
|
||||
self.assertTrue(bp.IsValid() and bp.GetNumLocations() == 1, VALID_BREAKPOINT)
|
||||
|
||||
event = lldb.SBEvent()
|
||||
while self.dbg.GetListener().WaitForEvent(2, event):
|
||||
if lldb.SBProcess.GetStateFromEvent(event) == lldb.eStateStopped and lldb.SBProcess.GetRestartedFromEvent(event):
|
||||
continue
|
||||
if lldb.SBProcess.GetStateFromEvent(event) == lldb.eStateRunning:
|
||||
continue
|
||||
self.fail("Setting a breakpoint generated an unexpected event: %s" % lldb.SBDebugger.StateAsCString(lldb.SBProcess.GetStateFromEvent(event)))
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
//===-- main.cpp ------------------------------------------------*- C++ -*-===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include <iostream>
|
||||
#include <stdio.h>
|
||||
|
||||
int main(int argc, char const *argv[])
|
||||
{
|
||||
getchar();
|
||||
printf("Set a breakpoint here.\n");
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -1165,12 +1165,13 @@ GDBRemoteCommunicationClient::SendContinuePacketAndWaitForResponse
|
|||
// binaries that would send two stop replies anytime the process
|
||||
// was interrupted, so we need to also check for an extra
|
||||
// stop reply packet if we interrupted the process
|
||||
if (m_interrupt_sent || (signo != sigint_signo && signo != sigstop_signo))
|
||||
const bool received_nonstop_signal = signo != sigint_signo && signo != sigstop_signo;
|
||||
if (m_interrupt_sent || received_nonstop_signal)
|
||||
{
|
||||
continue_after_async = false;
|
||||
if (received_nonstop_signal)
|
||||
continue_after_async = false;
|
||||
|
||||
// We didn't get a SIGINT or SIGSTOP, so try for a
|
||||
// very brief time (0.1s) to get another stop reply
|
||||
// Try for a very brief time (0.1s) to get another stop reply
|
||||
// packet to make sure it doesn't get in the way
|
||||
StringExtractorGDBRemote extra_stop_reply_packet;
|
||||
uint32_t timeout_usec = 100000;
|
||||
|
|
Loading…
Reference in New Issue