[lldb/Plugin] Test that a scripted process blueprint can be loaded for the dSYM

This patch ensures that lldb can automatically load a scripted process
blueprint from a dSYM bundle and launch a scripted process with it.

rdar://74502750

Differential Revision: https://reviews.llvm.org/D121316

Signed-off-by: Med Ismail Bennani <medismail.bennani@gmail.com>
This commit is contained in:
Med Ismail Bennani 2022-03-09 11:11:49 -08:00
parent 8d097a6b93
commit 6aa48034f9
1 changed files with 20 additions and 10 deletions

View File

@ -2,7 +2,7 @@
Test python scripted process in lldb Test python scripted process in lldb
""" """
import os import os, shutil
import lldb import lldb
from lldbsuite.test.decorators import * from lldbsuite.test.decorators import *
@ -43,29 +43,39 @@ class ScriptedProcesTestCase(TestBase):
self.expect('script dir(ScriptedProcess)', self.expect('script dir(ScriptedProcess)',
substrs=["launch"]) substrs=["launch"])
def move_blueprint_to_dsym(self, blueprint_name):
blueprint_origin_path = os.path.join(self.getSourceDir(), blueprint_name)
dsym_bundle = self.getBuildArtifact("a.out.dSYM")
blueprint_destination_path = os.path.join(dsym_bundle, "Contents",
"Resources", "Python")
if not os.path.exists(blueprint_destination_path):
os.mkdir(blueprint_destination_path)
blueprint_destination_path = os.path.join(blueprint_destination_path, "a_out.py")
shutil.copy(blueprint_origin_path, blueprint_destination_path)
@skipUnlessDarwin @skipUnlessDarwin
def test_invalid_scripted_register_context(self): def test_invalid_scripted_register_context(self):
"""Test that we can launch an lldb scripted process with an invalid """Test that we can launch an lldb scripted process with an invalid
Scripted Thread, with invalid register context.""" Scripted Thread, with invalid register context."""
self.build() self.build()
target = self.dbg.CreateTarget(self.getBuildArtifact("a.out"))
self.assertTrue(target, VALID_TARGET)
log_file = self.getBuildArtifact('thread.log')
self.runCmd("log enable lldb thread -f " + log_file)
self.assertTrue(os.path.isfile(log_file))
os.environ['SKIP_SCRIPTED_PROCESS_LAUNCH'] = '1' os.environ['SKIP_SCRIPTED_PROCESS_LAUNCH'] = '1'
def cleanup(): def cleanup():
del os.environ["SKIP_SCRIPTED_PROCESS_LAUNCH"] del os.environ["SKIP_SCRIPTED_PROCESS_LAUNCH"]
self.addTearDownHook(cleanup) self.addTearDownHook(cleanup)
scripted_process_example_relpath = 'invalid_scripted_process.py' self.runCmd("settings set target.load-script-from-symbol-file true")
self.runCmd("command script import " + os.path.join(self.getSourceDir(), self.move_blueprint_to_dsym('invalid_scripted_process.py')
scripted_process_example_relpath)) target = self.dbg.CreateTarget(self.getBuildArtifact("a.out"))
self.assertTrue(target, VALID_TARGET)
log_file = self.getBuildArtifact('thread.log')
self.runCmd("log enable lldb thread -f " + log_file)
self.assertTrue(os.path.isfile(log_file))
launch_info = lldb.SBLaunchInfo(None) launch_info = lldb.SBLaunchInfo(None)
launch_info.SetProcessPluginName("ScriptedProcess") launch_info.SetProcessPluginName("ScriptedProcess")
launch_info.SetScriptedProcessClassName("invalid_scripted_process.InvalidScriptedProcess") launch_info.SetScriptedProcessClassName("a_out.InvalidScriptedProcess")
error = lldb.SBError() error = lldb.SBError()
process = target.Launch(launch_info, error) process = target.Launch(launch_info, error)