Add the skipIfReproducer decorator to the remaining tests that fail to replay because the GDB remote packets diverge during replay. This is *not* expected and should be fixed, but figuring out exactly what caused the divergence has proven pretty difficult to track down. I've marked these tests as skipped for now so we can get clean results and detect new regressions. I have no evidence to believe that these failures have the same root cause, so I've not assigned them a PR.
92 lines
2.5 KiB
Python
92 lines
2.5 KiB
Python
"""
|
|
Test process attach.
|
|
"""
|
|
|
|
|
|
|
|
import os
|
|
import lldb
|
|
import shutil
|
|
from lldbsuite.test.decorators import *
|
|
from lldbsuite.test.lldbtest import *
|
|
from lldbsuite.test import lldbutil
|
|
|
|
exe_name = "ProcessAttach" # Must match Makefile
|
|
|
|
|
|
class ProcessAttachTestCase(TestBase):
|
|
|
|
mydir = TestBase.compute_mydir(__file__)
|
|
|
|
NO_DEBUG_INFO_TESTCASE = True
|
|
|
|
@skipIfiOSSimulator
|
|
@expectedFailureNetBSD
|
|
def test_attach_to_process_by_id(self):
|
|
"""Test attach by process id"""
|
|
self.build()
|
|
exe = self.getBuildArtifact(exe_name)
|
|
|
|
# Spawn a new process
|
|
popen = self.spawnSubprocess(exe)
|
|
self.addTearDownHook(self.cleanupSubprocesses)
|
|
|
|
self.runCmd("process attach -p " + str(popen.pid))
|
|
|
|
target = self.dbg.GetSelectedTarget()
|
|
|
|
process = target.GetProcess()
|
|
self.assertTrue(process, PROCESS_IS_VALID)
|
|
|
|
@expectedFailureNetBSD
|
|
@skipIfReproducer # Unexpected packet during replay
|
|
def test_attach_to_process_from_different_dir_by_id(self):
|
|
"""Test attach by process id"""
|
|
newdir = self.getBuildArtifact("newdir")
|
|
try:
|
|
os.mkdir(newdir)
|
|
except OSError as e:
|
|
if e.errno != os.errno.EEXIST:
|
|
raise
|
|
testdir = self.getBuildDir()
|
|
exe = os.path.join(newdir, 'proc_attach')
|
|
self.buildProgram('main.cpp', exe)
|
|
self.addTearDownHook(lambda: shutil.rmtree(newdir))
|
|
|
|
# Spawn a new process
|
|
popen = self.spawnSubprocess(exe)
|
|
self.addTearDownHook(self.cleanupSubprocesses)
|
|
|
|
os.chdir(newdir)
|
|
self.addTearDownHook(lambda: os.chdir(testdir))
|
|
self.runCmd("process attach -p " + str(popen.pid))
|
|
|
|
target = self.dbg.GetSelectedTarget()
|
|
|
|
process = target.GetProcess()
|
|
self.assertTrue(process, PROCESS_IS_VALID)
|
|
|
|
@expectedFailureNetBSD
|
|
def test_attach_to_process_by_name(self):
|
|
"""Test attach by process name"""
|
|
self.build()
|
|
exe = self.getBuildArtifact(exe_name)
|
|
|
|
# Spawn a new process
|
|
popen = self.spawnSubprocess(exe)
|
|
self.addTearDownHook(self.cleanupSubprocesses)
|
|
|
|
self.runCmd("process attach -n " + exe_name)
|
|
|
|
target = self.dbg.GetSelectedTarget()
|
|
|
|
process = target.GetProcess()
|
|
self.assertTrue(process, PROCESS_IS_VALID)
|
|
|
|
def tearDown(self):
|
|
# Destroy process before TestBase.tearDown()
|
|
self.dbg.GetSelectedTarget().GetProcess().Destroy()
|
|
|
|
# Call super's tearDown().
|
|
TestBase.tearDown(self)
|