gpt4 book ai didi

xcode - 当我们在 swift 项目中遇到运行时错误时,为什么 Xcode 将我们发送到汇编语言中的 Thread 输出?重点是什么 ?

转载 作者:行者123 更新时间:2023-12-02 10:41:58 25 4
gpt4 key购买 nike

如您所知,当我们在 Xcode 中运行 Swift 项目时出现问题时,我们将直接进入调试导航器的线程部分,我们将面临一些像这样的汇编代码:

enter image description here

enter image description here

我想知道是否有任何引用、教程或工具来理解这些代码,我们应该有理由直接使用这些代码

让我说清楚;我知道如何修复错误,但是当我不理解这样的事情时,这让我很痛苦。我想知道这些代码是什么以及我们如何使用它们或至少理解它们。

谢谢 :)

最佳答案

原始问题:那是什么语言?这是用于 x86-64 的 AT&T 语法汇编语言。 https://stackoverflow.com/tags/x86/info获取来自英特尔和其他资源的手册,以及 https://stackoverflow.com/tags/att/info了解 AT&T 语法与大多数手册中使用的 Intel 语法有何不同。 (我认为 x86 标记 wiki 有一些 AT&T 语法教程。)大多数 AT&T 语法反汇编器也有 intel 语法模式,因此如果您想要与 Intel 手册匹配的 asm,可以使用它。

What's the point?



关键是如果你知道 asm,你就可以调试你的程序。或者您可以将 asm 展示给理解它的人,或将其包含在错误报告中。

您是否在没有调试符号的情况下进行编译?或者它是否在没有符号的库代码中崩溃?如果调试器无法显示源代码,或者如果您要求 asm,则调试器向您显示 asm 是正常的。

如果您有自己代码的调试符号,您至少可以回溯到您有源代码的父函数。 (除非堆栈已损坏。)

您的程序是否在粉红色突出显示的那条指令上出错?这有点奇怪,因为它是从静态数据加载的(RIP 相对加载意味着地址是链接时间常数)。

你可能吗 munmapmprotect程序数据或文本段的那一页因此加载会出错?通常,只有在寻址模式涉及指针时才会出错。

(尽管 call *0x1234(%rip) 就在它通过函数指针调用之前。函数指针存储在内存中,但如果它指向未映射或不可执行的页面,则在 call 执行后的代码获取会出错)。但是你的第一张图片显示你得到了一个 SIGABRT,而不是 SIGSEGV,所以这更像是在断言失败后故意中止的程序。

I believe majority of swift coders don't know asm



如果没有调试符号和源文件,调试器就没有什么比这更有用的了。

还要记住,大多数调试器作者都知道 asm,所以对他们来说,这是一个明显有用的特性/行为。他们知道很多人将无法从中受益,但有些人会。

Asm 是机器上真正运行的东西。没有asm,你就找不到错误代码的编译器bug,等等。至于软件bug,没有比asm更低的级别,所以它不是一些低级层的任意选择来停止。

(除非您的反汇编器或调试器中也存在错误,在这种情况下您需要检查十六进制机器代码。)

关于xcode - 当我们在 swift 项目中遇到运行时错误时,为什么 Xcode 将我们发送到汇编语言中的 Thread 输出?重点是什么 ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52154349/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com