1import lldb 2from lldbsuite.test.decorators import * 3import lldbsuite.test.lldbtest as lldbtest 4import lldbsuite.test.lldbutil as lldbutil 5import os 6import unittest2 7 8 9class TestDSYMSourcePathRemapping(lldbtest.TestBase): 10 11 def build(self): 12 botdir = self.getBuildArtifact('buildbot') 13 userdir = self.getBuildArtifact('user') 14 inputs = self.getSourcePath('Inputs') 15 lldbutil.mkdir_p(botdir) 16 lldbutil.mkdir_p(userdir) 17 import shutil 18 for f in ['main.c', 'relative.c']: 19 shutil.copyfile(os.path.join(inputs, f), os.path.join(botdir, f)) 20 shutil.copyfile(os.path.join(inputs, f), os.path.join(userdir, f)) 21 22 super(TestDSYMSourcePathRemapping, self).build() 23 24 # Remove the build sources. 25 self.assertTrue(os.path.isdir(botdir)) 26 shutil.rmtree(botdir) 27 28 # Create a plist. 29 import subprocess 30 dsym = self.getBuildArtifact('a.out.dSYM') 31 uuid = subprocess.check_output(["/usr/bin/dwarfdump", "--uuid", dsym] 32 ).decode("utf-8").split(" ")[1] 33 import re 34 self.assertTrue(re.match(r'[0-9a-fA-F-]+', uuid)) 35 plist = os.path.join(dsym, 'Contents', 'Resources', uuid + '.plist') 36 with open(plist, 'w') as f: 37 f.write('<?xml version="1.0" encoding="UTF-8"?>\n') 38 f.write('<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">\n') 39 f.write('<plist version="1.0">\n') 40 f.write('<dict>\n') 41 f.write(' <key>DBGSourcePathRemapping</key>\n') 42 f.write(' <dict>\n') 43 f.write(' <key>' + os.path.realpath(botdir) + '</key>\n') 44 f.write(' <string>' + userdir + '</string>\n') 45 f.write(' </dict>\n') 46 f.write('</dict>\n') 47 f.write('</plist>\n') 48 49 50 @skipIf(debug_info=no_match("dsym")) 51 def test(self): 52 self.build() 53 54 target, process, _, _ = lldbutil.run_to_name_breakpoint( 55 self, 'main') 56 self.expect("source list -n main", substrs=["Hello Absolute"]) 57 bkpt = target.BreakpointCreateByName('relative') 58 lldbutil.continue_to_breakpoint(process, bkpt) 59 self.expect("source list -n relative", substrs=["Hello Relative"]) 60