blob: 5075868e9c1a7ab0e3424776abe65522805c7a5f [file] [log] [blame]
import lldb
from lldbsuite.test.decorators import *
import lldbsuite.test.lldbtest as lldbtest
import lldbsuite.test.lldbutil as lldbutil
import os
import unittest2
class TestDSYMSourcePathRemapping(lldbtest.TestBase):
mydir = lldbtest.TestBase.compute_mydir(__file__)
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"])