2017-02-14 17 views
0

Я использую много виртуальных сред, особенно с Python. Некоторые из кода, который я запускал в конкретной виртуальной среде и содержат некоторый код на C++. Ядро этого кода сбрасывает, и я хочу использовать lldb для его отладки.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 в мою виртуальную среду?

+0

У меня была аналогичная ошибка на Ubuntu 16.10, получается, что 'python-lldb-3.8' не помечен как зависимость и должен быть установлен вручную. – isanae

ответ

0

Проблема связана с тем, что виртуальные среды не копируют установленные по умолчанию модули по умолчанию. Какова цель виртуальных сред. Однако в настройках разработки некоторые из этих модулей необходимы. Таким образом, в 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 

Это похоже на трюк.

0

Я подозреваю, что что-то в «большом количестве нерелевантных данных для этого вопроса» может иметь значение. ;)

Вы можете составить простую программу, как

$ 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. Если это сработает, тогда выясните, что вы делаете по-разному между этими двумя примерами.

+0

Попробуйте простой сеанс отладки (например, выше) в вашей простой системе и в вашей виртуальной среде. Определите, какая часть несет ответственность. Это что-то неправильно сконфигурировано в вашей системе? Это как-то связано с виртуальной средой? это как-то связано с командами в сеансе отладки? Начните с самого базового сеанса отладки и добавьте переменные обратно, пока не увидите, что он сработал. –

+0

Это не делает ничего, чтобы помочь решить проблему. Простым тестом является запуск python и запуск 'import lldb', который отлично работает за пределами виртуальной среды и вызывает« ImportError »в нетронутом виртуальном. – Sardathrion

 Смежные вопросы

  • Нет связанных вопросов^_^