Files
clang-p2996/lldb/test/API/functionalities/load_after_attach/TestLoadAfterAttach.py
Pavel Labath 7866dbb261 [lldb/test] Remove a check from TestLoadAfterAttach
The two module retrieval methods (qXfer:libraries-svr4 and manual list
traversal) differ in how the handle the
manually-added-but-not-yet-loaded modules. The svr4 path will remove it,
while the manual one will keep in the list.

It's likely the two paths need ought to be synchronized, but right now,
this distinction is not relevant for the test.
2021-09-28 14:47:46 +02:00

59 lines
2.1 KiB
Python

import lldb
from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *
from lldbsuite.test import lldbutil
class TestCase(TestBase):
mydir = TestBase.compute_mydir(__file__)
NO_DEBUG_INFO_TESTCASE = True
@skipIfRemote
def test_load_after_attach(self):
self.build()
ctx = self.platformContext
lib_name = ctx.shlib_prefix + 'lib_b.' + ctx.shlib_extension
exe = self.getBuildArtifact("a.out")
lib = self.getBuildArtifact(lib_name)
target = self.dbg.CreateTarget(exe)
environment = self.registerSharedLibrariesWithTarget(target, ["lib_b"])
# Spawn a new process.
# use realpath to workaround llvm.org/pr48376
# Pass path to solib for dlopen to properly locate the library.
popen = self.spawnSubprocess(os.path.realpath(exe), extra_env=environment)
# Attach to the spawned process.
error = lldb.SBError()
process = target.AttachToProcessWithID(self.dbg.GetListener(),
popen.pid, error)
self.assertSuccess(error)
# Continue until first breakpoint.
breakpoint1 = self.target().BreakpointCreateBySourceRegex(
"// break here", lldb.SBFileSpec("main.cpp"))
self.assertEqual(breakpoint1.GetNumResolvedLocations(), 1)
stopped_threads = lldbutil.continue_to_breakpoint(self.process(), breakpoint1)
self.assertEqual(len(stopped_threads), 1)
# Change a variable to escape the loop
self.runCmd("expression main_thread_continue = 1")
# Continue so that dlopen is called.
breakpoint2 = self.target().BreakpointCreateBySourceRegex(
"// break after dlopen", lldb.SBFileSpec("main.cpp"))
self.assertEqual(breakpoint2.GetNumResolvedLocations(), 1)
stopped_threads = lldbutil.continue_to_breakpoint(self.process(), breakpoint2)
self.assertEqual(len(stopped_threads), 1)
# Check that image list contains liblib_b after dlopen.
self.match(
"image list",
patterns = [lib_name],
matching = True,
msg = lib_name + " missing in image list")