# Module Tracking in Swift Debug Info

DevFeed: [Module Tracking in Swift Debug Info](<https://devfeed.tech/articles/module-tracking-in-swift-debug-info-2933.md>)

Original publisher: [Read original article](<https://swift.org/blog/module-tracking-in-debug-info/>)

Author: Adrian Prantl

Published: 2026-09-11T15:30:00Z

Content type: tutorial

Language: en

Sources: [Swift.org](<https://devfeed.tech/sources/swift-org.md>)

Topics: [debugging](<https://devfeed.tech/topics/debugging.md>), [debug](<https://devfeed.tech/topics/debug.md>), [toolchain](<https://devfeed.tech/topics/toolchain.md>), [C++](<https://devfeed.tech/topics/c-plus-plus.md>)

Tags: [cmake](<https://devfeed.tech/tags/cmake.md>), [debug](<https://devfeed.tech/tags/debug.md>), [debugger](<https://devfeed.tech/tags/debugger.md>), [debugging](<https://devfeed.tech/tags/debugging.md>), [jit](<https://devfeed.tech/tags/jit.md>), [swift](<https://devfeed.tech/tags/swift.md>)

## AI overview

Swift 6.3 and the upcoming Swift 6.4 improve how explicitly built Swift modules are referenced in debug information. The article explains how this helps LLDB locate modules for expression evaluation, improving debugging reliability and reducing build products, while noting that custom build systems may need adjustments.

## Source excerpt

When your Swift program hits a breakpoint and stops so you can inspect it, the debugger's expression evaluator has to find the exact Swift module your code was built from. Until now, that lookup wasn't always precise. The upcoming Swift 6.4 release will include changes, begun in Swift 6.3, that address this by updating how the Swift compiler references explicitly-built Swift modules in debug info. The majority of developers will automatically benefit from faster, more reliable debugging and smaller build products, without any modifications to their SwiftPM or Xcode projects. For developers who maintain their own build systems using, for example, Bazel, Buck, or CMake, some adjustments may be necessary to take advantage of these changes. This article explains how the debugger uses Swift modules. Next, it describes how Swift 6.3 changes the way modules are tracked in debug info to solve several problems with the previous representation. Finally, it shows how to adjust build systems to take advantage of the new representation and eliminate some build steps that are no longer necessary. Swift modules and expression evaluation LLDB's standout feature is its powerful expression evaluator. Because LLDB embeds the Clang and Swift compilers, it can JIT-compile any valid source code and run it in the context of your application while stopped at a breakpoint. This includes not just calling code in your application, but also defining new data types, functions, and closures. Debugging features that are usually reserved for interpreted or JIT-compiled languages like JavaScript become available to ahead-of-time-compiled languages like C++ and, of course, Swift! In order to JIT-compile user expressions that make use of data types defined in the debugged program, LLDB's embedded Swift compiler needs to import the Swift modules defining those types. In a world before explicitly-built modules, LLDB would find the base name of the main module at the current breakpoint in the debug info