A second pass over the full API suite for tests that depend on features
unavailable on wasm32-wasip1 or in LLDB's Wasm support:
- Expression evaluation (skipIfWasm) for the C++ tests that the
"expression" category doesn't cover, since that category only applies to
commands/expression/*.
- Attaching to a running process (skipIfWasm). These tests have the
harness spawn the inferior as a host process and then attach, but a
.wasm module isn't a native executable, so exec'ing it fails with
ENOEXEC ("Exec format error"). The wasm module only runs inside the
runtime (e.g. iwasm) that LLDB launches, so there is no host process to
attach to.
Where a test also has supported, passing cases, the decorator is applied
per method.
41 lines
1.2 KiB
Python
41 lines
1.2 KiB
Python
"""
|
|
Test process attach when executable was deleted.
|
|
"""
|
|
|
|
|
|
import os
|
|
import lldb
|
|
from lldbsuite.test.decorators import *
|
|
from lldbsuite.test.lldbtest import *
|
|
from lldbsuite.test import lldbutil
|
|
|
|
|
|
@skipIfWasm # attaching requires launching the inferior as a host process
|
|
class TestDeletedExecutable(TestBase):
|
|
NO_DEBUG_INFO_TESTCASE = True
|
|
|
|
@skipIfWindows # cannot delete a running executable
|
|
def test(self):
|
|
self.build()
|
|
exe = self.getBuildArtifact("a.out")
|
|
|
|
# Use a file as a synchronization point between test and inferior.
|
|
pid_file_path = lldbutil.append_to_process_working_directory(
|
|
self, "token_pid_%d" % (int(os.getpid()))
|
|
)
|
|
self.addTearDownHook(
|
|
lambda: self.run_platform_command("rm %s" % (pid_file_path))
|
|
)
|
|
|
|
# Spawn a new process
|
|
popen = self.spawnSubprocess(exe, [pid_file_path])
|
|
|
|
# Wait until process has fully started up.
|
|
pid = lldbutil.wait_for_file_on_target(self, pid_file_path)
|
|
|
|
# Now we can safely remove the executable and test if we can attach.
|
|
os.remove(exe)
|
|
|
|
self.runCmd("process attach -p " + str(popen.pid))
|
|
self.runCmd("kill")
|