File: TestDSYMSourcePathRemapping.py

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (63 lines) | stat: -rw-r--r-- 2,339 bytes parent folder | download | duplicates (10)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
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"])