【问题标题】:Getting _remove_dead_weakref error for LLDB获取 LLDB 的 _remove_dead_weakref 错误
【发布时间】:2023-04-09 03:19:01
【问题描述】:

每次我在 MacOS 上启动 lldb 时,都会收到以下错误。

  File "<input>", line 1, in <module>
  File "/usr/local/Cellar/python@2/2.7.15_1/Frameworks/Python.framework/Versions/2.7/lib/python2.7/copy.py", line 52, in <module>
    import weakref
  File "/usr/local/Cellar/python@2/2.7.15_1/Frameworks/Python.framework/Versions/2.7/lib/python2.7/weakref.py", line 14, in <module>
    from _weakref import (
ImportError: cannot import name _remove_dead_weakref

我检查了所有文件和名称都在那里。

我不知道是什么导致了这个问题。

有什么想法吗?

【问题讨论】:

  • 你是如何启动 lldb 的?这看起来像是一个非标准的Brew 安装东西(至少是 Python),有什么理由你不只是安装和使用附带命令行实用程序(包括 lldb)的 xcode?​​span>
  • 我只是在终端中输入“lldb”。所以我需要用 xcode 启动?我希望我可以使用终端...
  • 您可以从终端使用 lldb,但看起来您已经开始使用 homebrew 手动安装东西,而不是简单地安装 xcode 以及可以在终端上正常工作的 xcode CLI 工具。跨度>

标签: macos macos-sierra lldb


【解决方案1】:

lldb 使用的 Python 框架实际上是系统自带的,不是 Xcode 自带的,但除此之外,Brad 也在使用它。

lldb 链接到 Python,它用于支持一系列可扩展性功能。即使 lldb 从系统安装中提取 Python dylib - 因为这是它所链接的 - 其他 Python 的存在(通常是因为其他 Python 二进制文件位于 /usr/bin/python 之前的路径上)将导致 Python从其他 Python 安装中读取其库文件。总的来说,这似乎并不顺利。

在我们看到的大多数情况下,确保 /usr/bin/python 位于路径的最前面将解决问题。还要确保 PYTHONPATH 没有引用您安装中的 python 文件。

【讨论】:

  • 这似乎有效。如果我运行rust-lldb,我会得到 OP 中记录的异常。如果我运行PATH=/usr/bin/ ~/.cargo/bin/rust-lldb,一切正常。
  • 因此,如果您想在 PATH 中将来自 Homebrew 的较新 Python 保留在系统 Python 之前,最好的办法是制作自己的 lldb shell 脚本包装器并将其放入 @ 987654325@(并把~/.local/bin放在PATH的第一位)?
【解决方案2】:

要将系统 Python 用于 lldb,但继续将 Homebrew python 用于其他所有内容,请将此 shell 脚本保存为 ~/.local/bin/lldb

#!/bin/sh
unset PYTHONPATH
export PATH=/usr/bin:$PATH
exec lldb "$@"

然后chmod +x ~/.local/bin/lldb 使其可执行。确保~/.local/bin 在您的PATH 中,并且位于系统lldb 所在的/usr/bin 之前。

【讨论】:

  • 当它从 TOT llvm.org 或来自 Xcode 11 的最新 lldb 出来时,你应该不需要使用这个技巧。
猜你喜欢
  • 2013-03-05
  • 2014-12-06
  • 2012-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多