在 MacOS 中调试 Numba
Debugging Numba in MacOS
问题
我在使用 numba 运行 一些模拟时遇到分段错误(进程结束,退出代码 139(被信号 11 中断:SIGSEGV))。
我正在尝试按照 numba 文档 (https://numba.pydata.org/numba-doc/dev/user/troubleshoot.html#example-debug-usage) 上的说明进行操作,但我无法在我的 MacOS 上安装 GDB。
MacOS 上的 GDB
我已按照本网站上的说明在 MacOS 上安装 GDB https://www.thomasvitale.com/how-to-setup-gdb-and-eclipse-to-debug-c-files-on-macos-sierra/,
然而当执行
$ 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?
macOS 处理调试信息的方式与其他系统略有不同。在大多数 Unix 系统上,编译器将调试信息发送到 .o 文件中。然后 linker 将调试信息复制到最终的可执行文件中。然后调试器从可执行文件中读取调试信息。由于调试信息通常很大,需要进行大量复制...因此在 macOS 上,我们将调试信息保留在 .o 文件中,而不是 linker 将 "debug map" 写入可执行文件。调试器的工作是找到 .o 文件并使用调试映射 link 调试信息。
听起来您正在使用的构建过程使用 "lto"(Link 时间优化),它获取所有 .o 文件并构建单个 .o 文件,然后 link编辑。这对于优化目的非常有用,因为您现在可以跨编译单元边界内联函数和其他类似的巧妙技巧。
但是需要保留该临时 lto 输出文件以便进行调试。在您的构建过程中似乎没有发生这种情况。
macOS 调试信息还有一步。如果您想长期存储调试信息,那么必须保留所有 .o 文件会很烦人,因此有一个工具 (dsymutil) 可以将调试信息从 .o 文件复制到“.dSYM”包中。您可能会看到您的构建过程是否说明了有关 dSYM 的任何信息,这可能是它如何从构建中保留调试信息?
问题
我在使用 numba 运行 一些模拟时遇到分段错误(进程结束,退出代码 139(被信号 11 中断:SIGSEGV))。
我正在尝试按照 numba 文档 (https://numba.pydata.org/numba-doc/dev/user/troubleshoot.html#example-debug-usage) 上的说明进行操作,但我无法在我的 MacOS 上安装 GDB。
MacOS 上的 GDB
我已按照本网站上的说明在 MacOS 上安装 GDB https://www.thomasvitale.com/how-to-setup-gdb-and-eclipse-to-debug-c-files-on-macos-sierra/, 然而当执行
$ 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?
macOS 处理调试信息的方式与其他系统略有不同。在大多数 Unix 系统上,编译器将调试信息发送到 .o 文件中。然后 linker 将调试信息复制到最终的可执行文件中。然后调试器从可执行文件中读取调试信息。由于调试信息通常很大,需要进行大量复制...因此在 macOS 上,我们将调试信息保留在 .o 文件中,而不是 linker 将 "debug map" 写入可执行文件。调试器的工作是找到 .o 文件并使用调试映射 link 调试信息。
听起来您正在使用的构建过程使用 "lto"(Link 时间优化),它获取所有 .o 文件并构建单个 .o 文件,然后 link编辑。这对于优化目的非常有用,因为您现在可以跨编译单元边界内联函数和其他类似的巧妙技巧。
但是需要保留该临时 lto 输出文件以便进行调试。在您的构建过程中似乎没有发生这种情况。
macOS 调试信息还有一步。如果您想长期存储调试信息,那么必须保留所有 .o 文件会很烦人,因此有一个工具 (dsymutil) 可以将调试信息从 .o 文件复制到“.dSYM”包中。您可能会看到您的构建过程是否说明了有关 dSYM 的任何信息,这可能是它如何从构建中保留调试信息?