105 lines · python
1import socket2import gdbremote_testcase3import lldbgdbserverutils4from lldbsuite.test.decorators import *5from lldbsuite.test.lldbtest import *6from lldbsuite.test import lldbutil7 8 9class TestPlatformProcessConnect(TestBase):10 NO_DEBUG_INFO_TESTCASE = True11 12 @skipIfRemote13 @expectedFailureAll(hostoslist=["windows"], triple=".*-android")14 @skipIfDarwin # lldb-server not found correctly15 @expectedFailureAll(oslist=["windows"]) # process modules not loaded16 # lldb-server platform times out waiting for the gdbserver port number to be17 # written to the pipe, yet it seems the gdbserver already has written it.18 @expectedFailureAll(19 archs=["aarch64"],20 oslist=["freebsd"],21 bugnumber="https://github.com/llvm/llvm-project/issues/84327",22 )23 @add_test_categories(["lldb-server"])24 def test_platform_process_connect(self):25 self.build()26 27 hostname = socket.getaddrinfo("localhost", 0, proto=socket.IPPROTO_TCP)[0][4][0]28 listen_url = "[%s]:0" % hostname29 30 port_file = self.getBuildArtifact("port")31 commandline_args = [32 "platform",33 "--listen",34 listen_url,35 "--socket-file",36 port_file,37 "--",38 self.getBuildArtifact("a.out"),39 "foo",40 ]41 self.spawnSubprocess(lldbgdbserverutils.get_lldb_server_exe(), commandline_args)42 43 socket_id = lldbutil.wait_for_file_on_target(self, port_file)44 45 new_platform = lldb.SBPlatform("remote-" + self.getPlatform())46 self.dbg.SetSelectedPlatform(new_platform)47 48 connect_url = "connect://[%s]:%s" % (hostname, socket_id)49 self.runCmd("platform connect %s" % connect_url)50 51 lldbutil.run_break_set_by_symbol(self, "main")52 process = self.process()53 54 process.Continue()55 56 frame = self.frame()57 self.assertEqual(frame.GetFunction().GetName(), "main")58 self.assertEqual(frame.FindVariable("argc").GetValueAsSigned(), 2)59 process.Continue()60 61 @skipIfRemote62 @expectedFailureAll(hostoslist=["windows"], triple=".*-android")63 @skipIfDarwin # lldb-server not found correctly64 @expectedFailureAll(oslist=["windows"]) # process modules not loaded65 # lldb-server platform times out waiting for the gdbserver port number to be66 # written to the pipe, yet it seems the gdbserver already has written it.67 @expectedFailureAll(68 archs=["aarch64"],69 oslist=["freebsd"],70 bugnumber="https://github.com/llvm/llvm-project/issues/84327",71 )72 @add_test_categories(["lldb-server"])73 def test_platform_process_connect_with_unix_connect(self):74 self.build()75 lldb_temp_dir = lldb.SBHostOS.GetLLDBPath(lldb.ePathTypeLLDBTempSystemDir)76 named_pipe = "%s/platform_server.sock" % lldb_temp_dir77 port_file = self.getBuildArtifact("port")78 commandline_args = [79 "platform",80 "--listen",81 named_pipe,82 "--socket-file",83 port_file,84 "--",85 self.getBuildArtifact("a.out"),86 "foo",87 ]88 self.spawnSubprocess(lldbgdbserverutils.get_lldb_server_exe(), commandline_args)89 90 socket_file = lldbutil.wait_for_file_on_target(self, port_file)91 new_platform = lldb.SBPlatform("remote-" + self.getPlatform())92 self.dbg.SetSelectedPlatform(new_platform)93 connect_url = "unix-connect://%s" % socket_file94 self.runCmd("platform connect %s" % connect_url)95 96 lldbutil.run_break_set_by_symbol(self, "main")97 process = self.process()98 99 process.Continue()100 101 frame = self.frame()102 self.assertEqual(frame.GetFunction().GetName(), "main")103 self.assertEqual(frame.FindVariable("argc").GetValueAsSigned(), 2)104 process.Continue()105