Skip to content

Bug: Stack trace paths with leading slash not clickable in Xcode #3290

@tinder-hemanthprasad

Description

@tinder-hemanthprasad

Bug: Stack trace paths with leading slash not clickable in Xcode

Target Repository: https://github.com/MobileNativeFoundation/rules_xcodeproj/issues


Description

Stack traces and diagnostic messages in Xcode display workspace-relative file paths with a leading slash (e.g., /Projects/Modules/Service/CoreDataService/Source/SetupProcedure.swift:61). However, clicking on these paths does nothing - Xcode cannot navigate to the files.

Root Cause: The generated ~/.lldbinit-rules_xcodeproj file contains source-map entries for paths starting with ./ but is missing a mapping for paths starting with / (leading slash without dot prefix). These paths appear in debug symbols as workspace-relative but are interpreted by Xcode as absolute filesystem paths from root.

Current lldbinit Configuration

The generated ~/.lldbinit-rules_xcodeproj contains:

platform settings -w "/var/tmp/_bazel_username/.../execroot/_main"
settings set target.source-map ./bazel-out/ "/var/tmp/.../bazel-out"
settings append target.source-map ./external/ "/var/tmp/.../external"
settings append target.source-map "./" "/Users/username/Developer/workspace"

The last line maps ./ but not / (leading slash without dot), which is needed for paths in stack traces.

Reproduction steps

  1. Build an iOS application using rules_xcodeproj
  2. Run the app in Xcode and observe a crash or view stack traces in the Thread navigator
  3. Note that file paths appear as /Projects/Modules/YourModule/Source/File.swift:123
  4. Click on any file path in the stack trace
  5. Observe that Xcode does not navigate to the file (nothing happens)

Example Stack Trace

#5  0x00000001119afd53 in SetupProcedure.makePersistentContainer(storeType:) at /Projects/Modules/Service/CoreDataService/Source/SetupProcedure.swift:61
#6  0x00000001119aeb33 in SetupProcedure.execute() at /Projects/Modules/Service/CoreDataService/Source/SetupProcedure.swift:38
#7  0x0000000111985a13 in CoreDataService.init(synchronousTestMode:storeType:bundle:walSizeLimitOptimizationEnabled:completion:) at /Projects/Modules/Service/CoreDataService/Source/CoreDataService.swift:312

Clicking on these paths in Xcode does nothing - they should navigate to the corresponding source files.

Expected behavior

Clicking on file paths in stack traces (including those with leading /) should navigate to the correct source file in Xcode, similar to how paths starting with ./ currently work.

Workaround

Manually add the missing source-map entry to ~/.lldbinit-rules_xcodeproj:

echo 'settings append target.source-map "/" "/Users/username/Developer/workspace/"' >> ~/.lldbinit-rules_xcodeproj

Then restart Xcode. This makes the navigation work, but the fix is lost whenever the Xcode project is regenerated with Bazel.

Proposed Fix

Modify xcodeproj/internal/bazel_integration_files/create_lldbinit.sh to add the missing source-map entry:

diff --git a/xcodeproj/internal/bazel_integration_files/create_lldbinit.sh b/xcodeproj/internal/bazel_integration_files/create_lldbinit.sh
index 3e05aea6..b20f947f 100755
--- a/xcodeproj/internal/bazel_integration_files/create_lldbinit.sh
+++ b/xcodeproj/internal/bazel_integration_files/create_lldbinit.sh
@@ -29,6 +29,10 @@ echo "settings append target.source-map ./external/ \"$BAZEL_EXTERNAL\""
 # `external` when set from swiftsourcefile
 echo "settings append target.source-map ./external/ \"$build_external\""
 
+# Workspace-relative paths with leading slash (e.g., /Projects/...)
+# These appear in debug symbols and need to be mapped to the workspace root
+echo "settings append target.source-map \"/\" \"$execution_root/\""
+
 # Project files and locally resolved external repositories
 #
 # lldb seems to match breakpoints based on the second argument, using a simple

This adds a source-map for paths starting with / (workspace-relative with leading slash) and maps them to $execution_root (the workspace directory).

rules_xcodeproj version

2.12.1 (commit 637a94211aa7528ef92335b51825bf596b93bcf5)

Xcode version

26.0 (17A324)

Bazel version

9.x (via bazelisk)

rules_apple version

4.2.0

rules_swift version

2.8.2

Additional information

Verified Solution

I've tested this fix by manually adding the source-map entry to ~/.lldbinit-rules_xcodeproj, restarting Xcode, and confirming that clicking on stack trace paths now correctly navigates to the source files.

Related Issues

This is related to #3134 which addresses other lldbinit configuration concerns, though that issue focuses on global vs project-specific configuration rather than incomplete source-map entries.

Impact

  • Affected workflow: Daily debugging sessions
  • Frequency: Every time a crash or stack trace appears in Xcode
  • Workaround complexity: Easy but temporary (lost on project regeneration)
  • User base: Anyone using rules_xcodeproj for iOS/macOS development with Xcode

I'm happy to submit a PR with this fix if that would be helpful!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions