With the following setup (gist):
Package.swift:
import PackageDescription
let package = Package(
name: "foo",
dependencies: [
.Package(url: "https://github.com/rxwei/LLVM_C", majorVersion: 1, minor: 0)
]
)
Makefile:
all:
@swift build \
-Xcc -I`llvm-config --includedir` \
-Xlinker -L`llvm-config --libdir` \
-Xlinker -rpath -Xlinker `llvm-config --libdir`
main.swift:
import LLVM_C.Core
func foo(_ a: Int) {
let b = a * a
print(b)
}
foo(4)
After compiling an executable with make
and starting the executable in a debugger, I cannot print the values of any variables:
(lldb) b foo
Breakpoint 1: where = foo`foo.foo (Swift.Int) -> () + 12 at main.swift:4, address = 0x00000001000014dc
(lldb) r
Process 14376 launched: '/Users/emlai/Code/foo/.build/debug/foo' (x86_64)
Process 14376 stopped
* thread #1: tid = 0x226d5, 0x00000001000014dc foo`foo(a=4) -> () + 12 at main.swift:4, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
frame #0: 0x00000001000014dc foo`foo(a=4) -> () + 12 at main.swift:4
1 import LLVM_C.Core
2
3 func foo(_ a: Int) {
-> 4 let b = a * a
5 print(b)
6 }
7
(lldb) p a
error: in auto-import:
failed to get module 'foo' from AST context:
(lldb) p a
Shared Swift state for foo has developed fatal errors and is being discarded.
REPL definitions and persistent names/types will be lost.
warning: Swift error in module foo.
Debug info from this module will be unavailable in the debugger.
error: in auto-import:
failed to get module 'foo' from AST context
If I comment out the import LLVM_C.Core
line, everything works properly.
This is preventing me from debugging my project and making forward progress. How can I fix this?
Searching the web for this problem results only to "its a lldb bug".
The only way I've found to debug is to debug tests. But AFAIK you can't run tests with having own main.swift
script. This results into multiple definition of 'main'
.
So just follow instructions here https://swift.org/getting-started/#using-the-package-manager to create needed file hierarchy for package with tests (with swift package init
or manually), write some tests, run swift test
and, finally, lldb .build/debug/fooPackageTests.xctest
(<binary name>PackageTests.xctest
is binary file for running tests). I suppose it is compiled differently in some point rather than common binary. At least that worked in my case :)
Good luck with debugging! :)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With