Swift 如何像 Python 那样 崩溃了输出 backtrace 或者至少是哪行出错了。。。

34 天前
 chopin1998519

swift 新手

写了一个 1000 多行的代码, 没有用 xcode 开发, 直接 vscode 撸的,

运行时 直接 ./main.swift (代码首行 #!env swift ) 或者 swiftc main.swift -o main.bin , 然后 ./main.bin 运行

现在程序大体稳定, 但是偶尔会崩溃一下, 崩溃时只是提示 crash 和很少信息, 搞不清楚哪里错误。

也试过 swiftc -g main.swift -o main.bin 然后有 lldb ./main.bin , 再 run, crash 的时候提示 error: No auto repeat.com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x8)
(lldb) me #0: 0x0000000192db0154 CoreFoundationCFGetTypeID + 100

就不会了。。。

有没有可能像 python 那些,crash 了告诉我是哪行因为什么原因错掉的呢??

谢谢各位大佬!

416 次点击
所在节点    Swift
4 条回复
butanediol2d
34 天前
Swift 5.9 不是有这个了吗?
https://www.swift.org/blog/swift-5.9-backtraces/
chopin1998519
34 天前
@butanediol2d #1 我看到这个文章, 但是实在没搞懂 怎么启动这个?
chopin1998519
34 天前
MsgType = text;
To = "marco-18149700025";
} msg: success
Stack dump:
0. Program arguments: /Library/Developer/CommandLineTools/usr/bin/swift-frontend -frontend -interpret ./main.swift -Xllvm -aarch64-use-tbi -en
able-objc-interop -sdk /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -color-diagnostics -external-plugin-path /Library/Developer/CommandLineT
ools/SDKs/MacOSX.sdk/usr/lib/swift/host/plugins#/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/bin/swift-plugin-server -external-plugin-pa
th /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/local/lib/swift/host/plugins#/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/bin
/swift-plugin-server -external-plugin-path /Library/Developer/Developer/usr/lib/swift/host/plugins#/Library/Developer/Developer/usr/bin/swift-plugi
n-server -external-plugin-path /Library/Developer/Developer/usr/local/lib/swift/host/plugins#/Library/Developer/Developer/usr/bin/swift-plugin-serv
er -plugin-path /Library/Developer/CommandLineTools/usr/lib/swift/host/plugins -plugin-path /Library/Developer/CommandLineTools/usr/local/lib/swift
/host/plugins -target-sdk-version 14.4 -module-name main -- pin
1. Apple Swift version 5.10 (swiftlang-5.10.0.13 clang-1500.3.9.4)
2. Compiling with the current language version
3. While running user code "./main.swift"
Stack dump without symbol names (ensure you have llvm-symbolizer in your PATH or set the environment var `LLVM_SYMBOLIZER_PATH` to point to it):
0 swift-frontend 0x00000001060eff3c llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 56
1 swift-frontend 0x00000001060ef0f8 llvm::sys::RunSignalHandlers() + 112
2 swift-frontend 0x00000001060f0544 SignalHandler(int) + 360
3 libsystem_platform.dylib 0x0000000192d5f584 _sigtramp + 56
4 libsystem_platform.dylib 0xffff80010f473dac _sigtramp + 18446603334014027872
5 libsystem_platform.dylib 0x000000010f473dac _sigtramp + 18446744071502383200
6 libsystem_platform.dylib 0x000000010f478f28 _sigtramp + 18446744071502404060
7 libsystem_platform.dylib 0x000000010f47248c _sigtramp + 18446744071502376768
8 libsystem_platform.dylib 0x000000010f4794d0 _sigtramp + 18446744071502405508
9 libsystem_platform.dylib 0x000000010f47c154 _sigtramp + 18446744071502416904
10 libsystem_platform.dylib 0x000000010f47282c _sigtramp + 18446744071502377696
11 libsystem_platform.dylib 0x000000010f470210 _sigtramp + 18446744071502367940
12 libsystem_platform.dylib 0x000000010f470010 _sigtramp + 18446744071502367428
13 swift-frontend 0x0000000100b17e04 llvm::orc::runAsMain(int (*)(int, char**), llvm::ArrayRef<std::__1::basic_string<char, std::__1::cha
r_traits<char>, std::__1::allocator<char>>>, llvm::Optional<llvm::StringRef>) + 1344
14 swift-frontend 0x0000000100a4e01c swift::SwiftJIT::runMain(llvm::ArrayRef<std::__1::basic_string<char, std::__1::char_traits<char>, st
d::__1::allocator<char>>>) + 168
15 swift-frontend 0x0000000100a5c19c swift::RunImmediately(swift::CompilerInstance&, std::__1::vector<std::__1::basic_string<char, std::_
_1::char_traits<char>, std::__1::allocator<char>>, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocato
r<char>>>> const&, swift::IRGenOptions const&, swift::SILOptions const&, std::__1::unique_ptr<swift::SILModule, std::__1::default_delete<swift::SIL
Module>>&&) + 1028
16 swift-frontend 0x00000001009f3e90 processCommandLineAndRunImmediately(swift::CompilerInstance&, std::__1::unique_ptr<swift::SILModule,
std::__1::default_delete<swift::SILModule>>&&, llvm::PointerUnion<swift::ModuleDecl*, swift::SourceFile*>, swift::FrontendObserver*, int&) + 624
17 swift-frontend 0x00000001009ee210 performCompileStepsPostSILGen(swift::CompilerInstance&, std::__1::unique_ptr<swift::SILModule, std::
__1::default_delete<swift::SILModule>>, llvm::PointerUnion<swift::ModuleDecl*, swift::SourceFile*>, swift::PrimarySpecificPaths const&, int&, swift
::FrontendObserver*) + 1760
18 swift-frontend 0x00000001009eda18 swift::performCompileStepsPostSema(swift::CompilerInstance&, int&, swift::FrontendObserver*) + 2100
19 swift-frontend 0x00000001009f1f0c performCompile(swift::CompilerInstance&, int&, swift::FrontendObserver*) + 3616
20 swift-frontend 0x00000001009ef6d0 swift::performFrontend(llvm::ArrayRef<char const*>, char const*, void*, swift::FrontendObserver*) +
4968
21 swift-frontend 0x000000010097ee8c swift::mainEntry(int, char const**) + 2612
22 dyld 0x00000001929a60e0 start + 2360

比如一次 crash, 结果是这样的。。并没有看到出错行号
chopin1998519
34 天前
我终于会了。。。。谢谢!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1040249

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX