Skip to content

Commit

Permalink
Set target.swift-* lldb settings
Browse files Browse the repository at this point in the history
This allows lldb to work correctly if using the `-serialize-debugging-options` `swiftc` flag.
  • Loading branch information
brentleyjones committed Jul 29, 2022
1 parent f510cd2 commit f595e70
Show file tree
Hide file tree
Showing 76 changed files with 5,134 additions and 24 deletions.
18 changes: 18 additions & 0 deletions examples/ios_app/test/fixtures/bwb.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
buildConfigurationList = 914277EC9F57B808A8817CF5 /* Build configuration list for PBXAggregateTarget "BazelDependencies" */;
buildPhases = (
9A630CF63C380FAE522825A9 /* Bazel Build */,
20BEB4AE7798C11A8A904F5E /* Create swift_debug_settings.py */,
);
dependencies = (
);
Expand Down Expand Up @@ -872,6 +873,23 @@
shellScript = "set -euo pipefail\n\n\"$BAZEL_INTEGRATION_DIR/copy_outputs.sh\" \\\n \"_BazelForcedCompile_.swift\" \\\n \"ExampleObjcTests.xctest\" \\\n \"\"\n";
showEnvVarsInLog = 0;
};
20BEB4AE7798C11A8A904F5E /* Create swift_debug_settings.py */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
"$(INTERNAL_DIR)/swift_debug_settings.py",
);
name = "Create swift_debug_settings.py";
outputPaths = (
"$(BUILD_DIR)/swift_debug_settings.py",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "perl -pe 's/\\$(\\()?([a-zA-Z_]\\w*)(?(1)\\))/$ENV{$2}/g' \\\n \"$SCRIPT_INPUT_FILE_0\" > \"$SCRIPT_OUTPUT_FILE_0\"\n";
showEnvVarsInLog = 0;
};
21D8AA3BEA3F6C89F37D75A1 /* Copy Bazel Outputs */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,3 +52,10 @@ echo "settings append target.source-map ./external/ \"$build_external\""

# Project files
echo "settings append target.source-map ./ \"$SRCROOT\""

# Import swift_debug_settings.py
#
# This Python module sets a stop hook, that when hit, sets the Swift debug
# settings (i.e. `target.swift-*``) for the module of the current frame. This
# fixes debugging when using `-serialize-debugging-options`.
echo "command script import \"$BUILD_DIR/swift_debug_settings.py\""
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
#!/usr/bin/python3

"""An lldb module that registers a stop hook to set swift settings."""

import lldb

_BUNDLE_EXTENSIONS = [
".app",
".appex",
".bundle",
".framework",
".xctest",
]

_SETTINGS = {
"x86_64-apple-ios15.0.0-simulator Example.app/Example_ExecutableName" : {
"clang" : "-iquote \".\" -iquote \"$(BAZEL_OUT)/ios-x86_64-min15.0-applebin_ios-ios_x86_64-dbg-ST-a0d0e3b8f217/bin\" -I \"CoreUtilsObjC\" -I \"$(BAZEL_OUT)/ios-x86_64-min15.0-applebin_ios-ios_x86_64-dbg-ST-a0d0e3b8f217/bin/CoreUtilsObjC\" -fmodule-map-file=\"$(BAZEL_OUT)/ios-x86_64-min15.0-applebin_ios-ios_x86_64-dbg-ST-a0d0e3b8f217/bin/CoreUtilsObjC/CoreUtilsObjC.swift.modulemap\" -fmodule-map-file=\"$(BAZEL_OUT)/ios-x86_64-min15.0-applebin_ios-ios_x86_64-dbg-ST-a0d0e3b8f217/bin/Utils/Utils.swift.modulemap\" -O0 -DDEBUG=1 -fstack-protector -fstack-protector-all",
"frameworks" : [

],
"includes" : [

]
},
"x86_64-apple-ios15.0.0-simulator ExampleObjcTests.xctest/ExampleObjcTests" : {
"clang" : "-iquote \".\" -iquote \"$(BAZEL_OUT)/ios-x86_64-min15.0-applebin_ios-ios_x86_64-dbg-ST-a0d0e3b8f217/bin\" -O0 -DDEBUG=1 -fstack-protector -fstack-protector-all -DAWESOME -iquote \".\" -iquote \"$(BAZEL_OUT)/ios-x86_64-min15.0-applebin_ios-ios_x86_64-dbg-ST-a0d0e3b8f217/bin\" -I \"CoreUtilsObjC\" -I \"$(BAZEL_OUT)/ios-x86_64-min15.0-applebin_ios-ios_x86_64-dbg-ST-a0d0e3b8f217/bin/CoreUtilsObjC\" -fmodule-map-file=\"$(BAZEL_OUT)/ios-x86_64-min15.0-applebin_ios-ios_x86_64-dbg-ST-a0d0e3b8f217/bin/CoreUtilsObjC/CoreUtilsObjC.swift.modulemap\" -fmodule-map-file=\"$(BAZEL_OUT)/ios-x86_64-min15.0-applebin_ios-ios_x86_64-dbg-ST-a0d0e3b8f217/bin/Utils/Utils.swift.modulemap\" -O0 -DDEBUG=1 -fstack-protector -fstack-protector-all",
"frameworks" : [

],
"includes" : [

]
},
"x86_64-apple-ios15.0.0-simulator ExampleTests.xctest/ExampleTests" : {
"clang" : "-iquote \".\" -iquote \"$(BAZEL_OUT)/ios-x86_64-min15.0-applebin_ios-ios_x86_64-dbg-ST-a0d0e3b8f217/bin\" -I \"CoreUtilsObjC\" -I \"$(BAZEL_OUT)/ios-x86_64-min15.0-applebin_ios-ios_x86_64-dbg-ST-a0d0e3b8f217/bin/CoreUtilsObjC\" -fmodule-map-file=\"$(BAZEL_OUT)/ios-x86_64-min15.0-applebin_ios-ios_x86_64-dbg-ST-a0d0e3b8f217/bin/CoreUtilsObjC/CoreUtilsObjC.swift.modulemap\" -fmodule-map-file=\"$(BAZEL_OUT)/ios-x86_64-min15.0-applebin_ios-ios_x86_64-dbg-ST-a0d0e3b8f217/bin/Utils/Utils.swift.modulemap\" -fmodule-map-file=\"$(BAZEL_OUT)/ios-x86_64-min15.0-applebin_ios-ios_x86_64-dbg-ST-a0d0e3b8f217/bin/TestingUtils/TestingUtils.swift.modulemap\" -O0 -DDEBUG=1 -fstack-protector -fstack-protector-all -DAWESOME -iquote \".\" -iquote \"$(BAZEL_OUT)/ios-x86_64-min15.0-applebin_ios-ios_x86_64-dbg-ST-a0d0e3b8f217/bin\" -O0 -DDEBUG=1 -fstack-protector -fstack-protector-all -DAWESOME -iquote \".\" -iquote \"$(BAZEL_OUT)/ios-x86_64-min15.0-applebin_ios-ios_x86_64-dbg-ST-a0d0e3b8f217/bin\" -I \"CoreUtilsObjC\" -I \"$(BAZEL_OUT)/ios-x86_64-min15.0-applebin_ios-ios_x86_64-dbg-ST-a0d0e3b8f217/bin/CoreUtilsObjC\" -fmodule-map-file=\"$(BAZEL_OUT)/ios-x86_64-min15.0-applebin_ios-ios_x86_64-dbg-ST-a0d0e3b8f217/bin/CoreUtilsObjC/CoreUtilsObjC.swift.modulemap\" -fmodule-map-file=\"$(BAZEL_OUT)/ios-x86_64-min15.0-applebin_ios-ios_x86_64-dbg-ST-a0d0e3b8f217/bin/Utils/Utils.swift.modulemap\" -O0 -DDEBUG=1 -fstack-protector -fstack-protector-all",
"frameworks" : [

],
"includes" : [
"$(BAZEL_OUT)/ios-x86_64-min15.0-applebin_ios-ios_x86_64-dbg-ST-a0d0e3b8f217/bin/Example",
"$(BAZEL_OUT)/ios-x86_64-min15.0-applebin_ios-ios_x86_64-dbg-ST-a0d0e3b8f217/bin/TestingUtils"
]
},
"x86_64-apple-ios15.0.0-simulator ExampleUITests.xctest/ExampleUITests" : {
"clang" : "-iquote \".\" -iquote \"$(BAZEL_OUT)/ios-x86_64-min15.0-applebin_ios-ios_x86_64-dbg-ST-a0d0e3b8f217/bin\" -O0 -DDEBUG=1 -fstack-protector -fstack-protector-all -iquote \".\" -iquote \"$(BAZEL_OUT)/ios-x86_64-min15.0-applebin_ios-ios_x86_64-dbg-ST-a0d0e3b8f217/bin\" -I \"CoreUtilsObjC\" -I \"$(BAZEL_OUT)/ios-x86_64-min15.0-applebin_ios-ios_x86_64-dbg-ST-a0d0e3b8f217/bin/CoreUtilsObjC\" -fmodule-map-file=\"$(BAZEL_OUT)/ios-x86_64-min15.0-applebin_ios-ios_x86_64-dbg-ST-a0d0e3b8f217/bin/CoreUtilsObjC/CoreUtilsObjC.swift.modulemap\" -fmodule-map-file=\"$(BAZEL_OUT)/ios-x86_64-min15.0-applebin_ios-ios_x86_64-dbg-ST-a0d0e3b8f217/bin/Utils/Utils.swift.modulemap\" -O0 -DDEBUG=1 -fstack-protector -fstack-protector-all",
"frameworks" : [

],
"includes" : [

]
}
}

_FALLBACK_KEYS = {
"x86_64-apple-ios-simulator Example.app/Example_ExecutableName" : "x86_64-apple-ios15.0.0-simulator Example.app/Example_ExecutableName",
"x86_64-apple-ios-simulator ExampleObjcTests.xctest/ExampleObjcTests" : "x86_64-apple-ios15.0.0-simulator ExampleObjcTests.xctest/ExampleObjcTests",
"x86_64-apple-ios-simulator ExampleTests.xctest/ExampleTests" : "x86_64-apple-ios15.0.0-simulator ExampleTests.xctest/ExampleTests",
"x86_64-apple-ios-simulator ExampleUITests.xctest/ExampleUITests" : "x86_64-apple-ios15.0.0-simulator ExampleUITests.xctest/ExampleUITests"
}

def __lldb_init_module(debugger, _internal_dict):
# Register the stop hook when this module is loaded in lldb
debugger.HandleCommand(
"target stop-hook add -P swift_debug_settings.StopHook",
)

def _get_relative_executable_path(module):
for extension in _BUNDLE_EXTENSIONS:
prefix, _, suffix = module.rpartition(extension)
if prefix:
return prefix.split("/")[-1] + extension + suffix
return module.split("/")[-1]

class StopHook:
"An lldb stop hook class, that sets swift settings for the current module."

def __init__(self, _target, _extra_args, _internal_dict):
pass

def handle_stop(self, exe_ctx, _stream):
"Method that is called when the user stops in lldb."
target_triple = exe_ctx.target.GetTriple()
module = exe_ctx.frame.module.file.__get_fullpath__()
executable_path = _get_relative_executable_path(module)
key = f"{target_triple} {executable_path}"

settings = _SETTINGS.get(key)
if not settings:
fallback_key = _FALLBACK_KEYS.get(key)
if fallback_key:
settings = _SETTINGS.get(fallback_key)

if settings:
frameworks = " ".join([
f'"{path}"'
for path in settings["frameworks"]
])
if frameworks:
lldb.debugger.HandleCommand(
f"settings set -- target.swift-framework-search-paths {frameworks}",
)
else:
lldb.debugger.HandleCommand(
"settings clear target.swift-framework-search-paths",
)

includes = " ".join([
f'"{path}"'
for path in settings["includes"]
])
if includes:
lldb.debugger.HandleCommand(
f"settings set -- target.swift-module-search-paths {includes}",
)
else:
lldb.debugger.HandleCommand(
"settings clear target.swift-module-search-paths",
)

clang = settings["clang"]
if clang:
lldb.debugger.HandleCommand(
f"settings set -- target.swift-extra-clang-flags '{clang}'",
)
else:
lldb.debugger.HandleCommand(
"settings clear target.swift-extra-clang-flags",
)

return True
195 changes: 195 additions & 0 deletions examples/ios_app/test/fixtures/bwb_spec.json
Original file line number Diff line number Diff line change
Expand Up @@ -327,6 +327,37 @@
}
]
},
"lldb_context": {
"c": [
{
"i": [
"CoreUtilsObjC",
{
"_": "ios-x86_64-min15.0-applebin_ios-ios_x86_64-dbg-ST-a0d0e3b8f217/bin/CoreUtilsObjC",
"t": "g"
}
],
"m": [
{
"_": "ios-x86_64-min15.0-applebin_ios-ios_x86_64-dbg-ST-a0d0e3b8f217/bin/CoreUtilsObjC/CoreUtilsObjC.swift.modulemap",
"t": "g"
},
{
"_": "ios-x86_64-min15.0-applebin_ios-ios_x86_64-dbg-ST-a0d0e3b8f217/bin/Utils/Utils.swift.modulemap",
"t": "g"
}
],
"o": "-O0 -DDEBUG=1 -fstack-protector -fstack-protector-all",
"q": [
".",
{
"_": "ios-x86_64-min15.0-applebin_ios-ios_x86_64-dbg-ST-a0d0e3b8f217/bin",
"t": "g"
}
]
}
]
},
"name": "Example",
"outputs": {
"p": {
Expand Down Expand Up @@ -510,6 +541,47 @@
}
]
},
"lldb_context": {
"c": [
{
"o": "-O0 -DDEBUG=1 -fstack-protector -fstack-protector-all -DAWESOME",
"q": [
".",
{
"_": "ios-x86_64-min15.0-applebin_ios-ios_x86_64-dbg-ST-a0d0e3b8f217/bin",
"t": "g"
}
]
},
{
"i": [
"CoreUtilsObjC",
{
"_": "ios-x86_64-min15.0-applebin_ios-ios_x86_64-dbg-ST-a0d0e3b8f217/bin/CoreUtilsObjC",
"t": "g"
}
],
"m": [
{
"_": "ios-x86_64-min15.0-applebin_ios-ios_x86_64-dbg-ST-a0d0e3b8f217/bin/CoreUtilsObjC/CoreUtilsObjC.swift.modulemap",
"t": "g"
},
{
"_": "ios-x86_64-min15.0-applebin_ios-ios_x86_64-dbg-ST-a0d0e3b8f217/bin/Utils/Utils.swift.modulemap",
"t": "g"
}
],
"o": "-O0 -DDEBUG=1 -fstack-protector -fstack-protector-all",
"q": [
".",
{
"_": "ios-x86_64-min15.0-applebin_ios-ios_x86_64-dbg-ST-a0d0e3b8f217/bin",
"t": "g"
}
]
}
]
},
"name": "ExampleObjcTests.__internal__.__test_bundle",
"outputs": {
"p": {
Expand Down Expand Up @@ -732,6 +804,88 @@
}
]
},
"lldb_context": {
"c": [
{
"i": [
"CoreUtilsObjC",
{
"_": "ios-x86_64-min15.0-applebin_ios-ios_x86_64-dbg-ST-a0d0e3b8f217/bin/CoreUtilsObjC",
"t": "g"
}
],
"m": [
{
"_": "ios-x86_64-min15.0-applebin_ios-ios_x86_64-dbg-ST-a0d0e3b8f217/bin/CoreUtilsObjC/CoreUtilsObjC.swift.modulemap",
"t": "g"
},
{
"_": "ios-x86_64-min15.0-applebin_ios-ios_x86_64-dbg-ST-a0d0e3b8f217/bin/Utils/Utils.swift.modulemap",
"t": "g"
},
{
"_": "ios-x86_64-min15.0-applebin_ios-ios_x86_64-dbg-ST-a0d0e3b8f217/bin/TestingUtils/TestingUtils.swift.modulemap",
"t": "g"
}
],
"o": "-O0 -DDEBUG=1 -fstack-protector -fstack-protector-all -DAWESOME",
"q": [
".",
{
"_": "ios-x86_64-min15.0-applebin_ios-ios_x86_64-dbg-ST-a0d0e3b8f217/bin",
"t": "g"
}
]
},
{
"o": "-O0 -DDEBUG=1 -fstack-protector -fstack-protector-all -DAWESOME",
"q": [
".",
{
"_": "ios-x86_64-min15.0-applebin_ios-ios_x86_64-dbg-ST-a0d0e3b8f217/bin",
"t": "g"
}
]
},
{
"i": [
"CoreUtilsObjC",
{
"_": "ios-x86_64-min15.0-applebin_ios-ios_x86_64-dbg-ST-a0d0e3b8f217/bin/CoreUtilsObjC",
"t": "g"
}
],
"m": [
{
"_": "ios-x86_64-min15.0-applebin_ios-ios_x86_64-dbg-ST-a0d0e3b8f217/bin/CoreUtilsObjC/CoreUtilsObjC.swift.modulemap",
"t": "g"
},
{
"_": "ios-x86_64-min15.0-applebin_ios-ios_x86_64-dbg-ST-a0d0e3b8f217/bin/Utils/Utils.swift.modulemap",
"t": "g"
}
],
"o": "-O0 -DDEBUG=1 -fstack-protector -fstack-protector-all",
"q": [
".",
{
"_": "ios-x86_64-min15.0-applebin_ios-ios_x86_64-dbg-ST-a0d0e3b8f217/bin",
"t": "g"
}
]
}
],
"s": [
{
"_": "ios-x86_64-min15.0-applebin_ios-ios_x86_64-dbg-ST-a0d0e3b8f217/bin/Example/Example.swiftmodule",
"t": "g"
},
{
"_": "ios-x86_64-min15.0-applebin_ios-ios_x86_64-dbg-ST-a0d0e3b8f217/bin/TestingUtils/TestingUtils.swiftmodule",
"t": "g"
}
]
},
"name": "ExampleTests.__internal__.__test_bundle",
"outputs": {
"p": {
Expand Down Expand Up @@ -923,6 +1077,47 @@
}
]
},
"lldb_context": {
"c": [
{
"o": "-O0 -DDEBUG=1 -fstack-protector -fstack-protector-all",
"q": [
".",
{
"_": "ios-x86_64-min15.0-applebin_ios-ios_x86_64-dbg-ST-a0d0e3b8f217/bin",
"t": "g"
}
]
},
{
"i": [
"CoreUtilsObjC",
{
"_": "ios-x86_64-min15.0-applebin_ios-ios_x86_64-dbg-ST-a0d0e3b8f217/bin/CoreUtilsObjC",
"t": "g"
}
],
"m": [
{
"_": "ios-x86_64-min15.0-applebin_ios-ios_x86_64-dbg-ST-a0d0e3b8f217/bin/CoreUtilsObjC/CoreUtilsObjC.swift.modulemap",
"t": "g"
},
{
"_": "ios-x86_64-min15.0-applebin_ios-ios_x86_64-dbg-ST-a0d0e3b8f217/bin/Utils/Utils.swift.modulemap",
"t": "g"
}
],
"o": "-O0 -DDEBUG=1 -fstack-protector -fstack-protector-all",
"q": [
".",
{
"_": "ios-x86_64-min15.0-applebin_ios-ios_x86_64-dbg-ST-a0d0e3b8f217/bin",
"t": "g"
}
]
}
]
},
"name": "ExampleUITests.__internal__.__test_bundle",
"outputs": {
"p": {
Expand Down
Loading

0 comments on commit f595e70

Please sign in to comment.