Linux 上的 Swift 调试 - 缺少回溯

标签 swift linux

我有一个崩溃,我试图找到它,甚至将应用程序构建为调试并执行它,我似乎没有得到任何符号信息。

我在控制台收到的输出是:

fatal error: unexpectedly found nil while unwrapping an Optional value
Current stack trace:
0    libswiftCore.so                    0x00007f1c51ca51c0 swift_reportError + 120
1    libswiftCore.so                    0x00007f1c51cbfbe0 _swift_stdlib_reportFatalError + 62
2    libswiftCore.so                    0x00007f1c51ab9be6 <unavailable> + 1186790
3    libswiftCore.so                    0x00007f1c51c18ead <unavailable> + 2625197
4    libswiftCore.so                    0x00007f1c51ab9be6 <unavailable> + 1186790
5    libswiftCore.so                    0x00007f1c51bd4060 specialized _fatalErrorMessage(StaticString, StaticString, file : StaticString, line : UInt, flags : UInt32) -> Never + 96
6    myProgram                          0x000000000045909e <unavailable> + 364702
7    myProgram                          0x0000000000423f37 <unavailable> + 147255
8    libdispatch.so                     0x00007f1c5276e177 <unavailable> + 278903
9    libdispatch.so                     0x00007f1c52779edd <unavailable> + 327389
10   libdispatch.so                     0x00007f1c5277a890 <unavailable> + 329872
11   libdispatch.so                     0x00007f1c5277c5f4 <unavailable> + 337396
12   libdispatch.so                     0x00007f1c5279aa18 <unavailable> + 461336
13   libpthread.so.0                    0x00007f1c50c6f6ba <unavailable> + 30394
14   libc.so.6                          0x00007f1c4f7b9370 clone + 109
Illegal instruction (core dumped)

我根本找不到任何方法来扩展此信息,尽管我可以查看 map 文件。我觉得我们现在使用现代工具已经远远超出了这个领域。

有没有人有任何指示,或者确实知道如何生成包含更多信息的构建。

Ubuntu 16.04、Swift 3.1.1

最佳答案

所以,遗憾的是,这似乎是 lldb 中的一个错误,它在 ELF 可执行文件中使用本地符号,而 dladdr 在 linux 平台上找不到它们。

请在此处查看错误报告: https://bugs.swift.org/browse/SR-755

注意:

好消息是,有一个 bash 脚本可以为您完成所有工作。说明很少,但这是您需要做的:

下载此脚本: https://raw.githubusercontent.com/apple/swift/master/utils/symbolicate-linux-fatal

执行崩溃的应用。

$ myApp &> crash.log

然后执行脚本。

$ ./symbolicate-linux-fatal myApp crash.log

它帮了我很多忙。

使用 LLDB

如果仍处于开发阶段,您还可以使用 swift 调试器来提供帮助。

此外,如果您执行 lldb yourexecutable,则运行。您将暂停并能够完全调试您的应用程序。

关于Linux 上的 Swift 调试 - 缺少回溯,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44954314/

相关文章:

swift - 如何使用 RXBluetoothKit for RxSwift 将写入特性和通知特性结合起来

swift - 编译器的这个响应有效吗?

multithreading - 敲击按钮后应用程序崩溃

linux - 如何在 bash 脚本中回答控制台输出问题

Python paramiko 执行 sudo

linux - 在脚本中启用作业控制时,为什么无法捕获进程信号?

ios - 单击带有 Reveal 的推送通知导航到特定 View

ios - 将文本字段内容发布到 Firebase 数据库

regex - 在 linux 中为每个正则表达式匹配添加下划线

Python Windows 服务到守护进程服务