【问题标题】:Debugging Numba in MacOS在 MacOS 中调试 Numba
【发布时间】:2019-12-19 15:07:13
【问题描述】:

问题

使用 numba 运行一些模拟时出现分段错误(进程以退出代码 139 完成(被信号 11:SIGSEGV 中断))。

我正在尝试按照 numba 文档 (https://numba.pydata.org/numba-doc/dev/user/troubleshoot.html#example-debug-usage) 上的说明进行操作,但我无法在我的 MacOS 上安装 GDB。

MacOS 上的 GDB

我已按照此站点上的说明在 MacOS https://www.thomasvitale.com/how-to-setup-gdb-and-eclipse-to-debug-c-files-on-macos-sierra/ 上安装 GDB, 但是在执行时

$ gdb python

在终端上,我收到以下警告,使我无法调试代码:


warning: `/tmp/lto.o': can't open to read symbols: No such file or directory.
(No debugging symbols found in python)

lldb 和 Numba

我尝试过的另一个选项是使用 lldb 调试 Numba,但它似乎不起作用。

因此,我的问题是:如何在 MacOS 上调试 Numba?

【问题讨论】:

    标签: python gdb lldb numba


    【解决方案1】:

    macOS 处理调试信息的方式与其他系统略有不同。在大多数 Unix 系统上,编译器将调试信息发送到 .o 文件中。然后链接器将调试信息复制到最终的可执行文件中。然后调试器从可执行文件中读取调试信息。由于调试信息通常非常大,因此需要大量复制......所以在 macOS 上,我们将调试信息保留在 .o 文件中,而是链接器将“调试映射”写入可执行文件。查找 .o 文件并使用调试映射链接调试信息是调试器的工作。

    这听起来像是您使用“lto”(链接时间优化)使用它的构建过程,它获取所有 .o 文件并构建单个 .o 文件,然后链接该文件。这非常适合优化目的,因为您现在可以跨编译单元边界内联函数和其他类似的巧妙技巧。

    但需要保留该临时 lto 输出文件以进行调试。您的构建过程中似乎没有发生这种情况。

    还有另一个步骤可以在 macOS 上调试信息。如果您想长期存储调试信息,则必须保留所有 .o 文件会很烦人,因此有一个工具 (dsymutil) 可以将调试信息从 .o 文件复制到“.dSYM”包中。您可能会看到您的构建过程是否说明了 dSYM 的任何内容,这可能是它保留构建中的调试信息的方式?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-21
      • 2017-06-16
      • 1970-01-01
      • 2018-04-14
      • 2019-03-19
      • 2020-01-20
      • 1970-01-01
      • 2023-03-20
      相关资源
      最近更新 更多