4 ms·
The best part of is that you can get all this goodness even without having Swift code in your codebase. Just link your C++ (or whatever) project with The Swift
by yaglo 3y ago
The best part of is that you can get all this goodness even without having Swift code in your codebase.
Just link your C++ (or whatever) project with The Swift runtime (swiftrt.o and libswiftCore.so), and there you have it without writing any Swift.
- krackers 3y agoIf you're on mac (where I assume the two are already available), what compiler flags need to be passed in to do this?
- torarnv 3y ago$ clang++ foo.cpp -o foo -framework Foundation -lswift_Backtracing also works, but dunno if that's "public API" $ codesign --force --sign - --entitlements entitlements.plist foo https://github.com/apple/swift/blob/main/docs/Backtracing.rst#macos https://github.com/apple/swift/blob/main/docs/Backtracing.rs... $ SWIFT_BACKTRACE="enable=yes" ./foo Very cool!
- eatonphil 3y agoLooks like <stacktrace> is already part of C++23 [0]. But if you must use an older C++, why link the entire Swift runtime rather than something GCC's builtin backtraces [1] or libbacktrace [2]? [0] https://www.sandordargo.com/blog/2022/09/21/cpp23-stacktrace-library https://www.sandordargo.com/blog/2022/09/21/cpp23-stacktrace... [1] https://www.gnu.org/software/libc/manual/html_node/Backtraces.html https://www.gnu.org/software/libc/manual/html_node/Backtrace... [2] https://github.com/ianlancetaylor/libbacktrace https://github.com/ianlancetaylor/libbacktrace
- favorited 3y agoIf you're on the Mac, your process is probably linking the Swift runtime anyway. Foundation.framework is being reimplemented in Swift, so if your process links Foundation (or even just CF), you've got the Swift runtime.
- anarazel 3y agoI don't think <stacktrace> is async signal safe, and thus shouldn't be used for in-process crash reporting.
- yaglo 3y agoIt’s a nicer experience during development out of the box, without having to do anything manually. Swift Backtracing is not only about the symbols, it’s also interactive and lets you attach the debugger after the process crashes, which is neat.