【问题标题】:lldb in a Python virtal environmentPython 虚拟环境中的 lldb
【发布时间】:2017-02-14 10:43:09
【问题描述】:

我倾向于使用很多虚拟环境,尤其是 Python。我在特定虚拟环境中运行的一些代码并包含一些 C++ 代码。此代码核心转储,我想使用lldb 对其进行调试。

但是,我明白了

; lldb a.out -c core.17915
Core file '/path/core.17915' (x86_64) was loaded.
Process 0 stopped
* thread #1: tid = 0, 0x0000000000559689 

[...] ← lots of irrelevant data for this question.

(lldb) frame variable
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named lldb.embedded_interpreter
Traceback (most recent call last):
  File "<string>", line 1, in <module>
NameError: name 'run_one_line' is not defined
Traceback (most recent call last):
  File "<string>", line 1, in <module>
NameError: name 'run_one_line' is not defined
Traceback (most recent call last):
  File "<string>", line 1, in <module>
NameError: name 'run_one_line' is not defined
Traceback (most recent call last):
  File "<string>", line 1, in <module>
NameError: name 'run_one_line' is not defined

zsh: segmentation fault (core dumped)  lldb a.out -c core.17915

我可以导入在虚拟环境之外运行的 lldb,但不能在虚拟环境中执行此操作。我不希望将所有系统模块都添加到虚拟环境中,因为这样一开始就违背了拥有虚拟环境的意义。

如何在我的虚拟环境中加载lldb 模块?

【问题讨论】:

  • 我在 Ubuntu 16.10 上遇到过类似的错误,原来 python-lldb-3.8 没有被标记为依赖项,必须手动安装。

标签: python virtualenv lldb


【解决方案1】:

我怀疑“这个问题的大量不相关数据”中的某些内容可能是相关的。 ;)

你能编译一个简单的程序吗

$ echo "int main () { }" > /tmp/a.c
$ clang -g -o /tmp/a.out /tmp/a.c
$ lldb -x /tmp/a.out
(lldb) br s -n main
(lldb) r
(lldb) fr v

(或gcc,随便)。那样有用吗?如果这不起作用,那么您安装 lldb 的方式会有些奇怪。如果它确实有效,那么请找出这两个示例之间的不同之处。

【讨论】:

  • 在您的普通系统和虚拟环境中尝试一个简单的调试会话(如上所示)。缩小负责的部分。您的系统上是否配置错误?它与虚拟环境有关吗?它与调试会话中的命令有关吗?从最基本的调试会话开始,然后重新添加变量,直到您看到它失败。
  • 这对缩小问题没有任何帮助。一个简单的测试是启动 python 并运行import lldb,它在虚拟环境之外运行良好,并在原始虚拟环境中引发ImportError
【解决方案2】:

问题源于虚拟环境默认不复制系统范围内安装的模块这一事实。这是虚拟环境的重点。但是,在开发环境中,需要其中一些模块。因此,在tox.ini 中,我调用了一个脚本(通过commands)来进行后期设置工作。在那个脚本中,我有

lib_python_path="/usr/lib64/python2.7"
dst="$VIRTUAL_ENV/lib/python2.7/site-packages"
…
# Copy lldb, iff it exists.
if [ -d "${lib_python_path}/site-packages/lldb" ]
then
    ln -f -s ${lib_python_path}/site-packages/lldb ${dst}
fi

这似乎可以解决问题。

【讨论】:

    猜你喜欢
    • 2019-09-24
    • 2020-09-02
    • 1970-01-01
    • 2021-09-18
    • 2010-11-27
    • 1970-01-01
    • 1970-01-01
    • 2017-05-07
    相关资源
    最近更新 更多