| import lldb | |
| from lldbsuite.test.decorators import * | |
| import lldbsuite.test.lldbtest as lldbtest | |
| import lldbsuite.test.lldbutil as lldbutil | |
| import os | |
| class TestDSYMSourcePathRemapping(lldbtest.TestBase): | |
| def build(self): | |
| botdir = self.getBuildArtifact("buildbot") | |
| userdir = self.getBuildArtifact("user") | |
| inputs = self.getSourcePath("Inputs") | |
| lldbutil.mkdir_p(botdir) | |
| lldbutil.mkdir_p(userdir) | |
| import shutil | |
| for f in ["main.c", "relative.c"]: | |
| shutil.copyfile(os.path.join(inputs, f), os.path.join(botdir, f)) | |
| shutil.copyfile(os.path.join(inputs, f), os.path.join(userdir, f)) | |
| super(TestDSYMSourcePathRemapping, self).build() | |
| # Remove the build sources. | |
| self.assertTrue(os.path.isdir(botdir)) | |
| shutil.rmtree(botdir) | |
| # Create a plist. | |
| import subprocess | |
| dsym = self.getBuildArtifact("a.out.dSYM") | |
| uuid = ( | |
| subprocess.check_output(["/usr/bin/dwarfdump", "--uuid", dsym]) | |
| .decode("utf-8") | |
| .split(" ")[1] | |
| ) | |
| import re | |
| self.assertTrue(re.match(r"[0-9a-fA-F-]+", uuid)) | |
| plist = os.path.join(dsym, "Contents", "Resources", uuid + ".plist") | |
| with open(plist, "w") as f: | |
| f.write('<?xml version="1.0" encoding="UTF-8"?>\n') | |
| f.write( | |
| '<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">\n' | |
| ) | |
| f.write('<plist version="1.0">\n') | |
| f.write("<dict>\n") | |
| f.write(" <key>DBGSourcePathRemapping</key>\n") | |
| f.write(" <dict>\n") | |
| f.write(" <key>" + os.path.realpath(botdir) + "</key>\n") | |
| f.write(" <string>" + userdir + "</string>\n") | |
| f.write(" </dict>\n") | |
| f.write("</dict>\n") | |
| f.write("</plist>\n") | |
| @skipIf(debug_info=no_match("dsym")) | |
| def test(self): | |
| self.build() | |
| target, process, _, _ = lldbutil.run_to_name_breakpoint(self, "main") | |
| self.expect("source list -n main", substrs=["Hello Absolute"]) | |
| bkpt = target.BreakpointCreateByName("relative") | |
| lldbutil.continue_to_breakpoint(process, bkpt) | |
| self.expect("source list -n relative", substrs=["Hello Relative"]) |