在MacOS中调试Numba

问题描述 投票:0回答:1

问题

[使用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个回答
0
投票

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

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

但是该临时lto输出文件需要保留,以便调试工作。看来这在您的构建过程中没有发生。

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

© www.soinside.com 2019 - 2024. All rights reserved.