2014-10-07 2 views
19

Я использую ubuntu 14.04, где python3 является системным пакетом по умолчанию.Как изменить интерпретатор Python, используемый gdb?

Я хочу, чтобы отладить программы python2.7 с GDB, но я, кажется, столкнулись с такой проблемой:

Когда я нахожусь в БГД, с помощью команды py ставит меня в качестве переводчика, так что я побежал эти команды переводчик:

Сначала я проверить версию интерпретатора:

(gdb) py 
>import sys 
>print(sys.version) 
>end 
3.4.0 (default, Apr 11 2014, 13:08:40) 
[GCC 4.8.2] 

Затем я проверяю, что используется интерпретатор исполняемого

(gdb) py 
>import sys 
>print(sys.executable) 
>end 
/usr/bin/python 
(gdb) 

Тогда в Баш, я проверяю переводчика:

12:34]hostname ~ $ls -l /usr/bin/python 
lrwxrwxrwx 1 root root 9 Dec 21 2013 /usr/bin/python -> python2.7 

Таким образом, хотя GDB говорит, что использует мой 2.7 интерпретатор, это на самом деле с помощью другой. Мне нужен переводчик 2.7, чтобы иметь возможность использовать его с конкретными расширениями python, которые предоставляет пакет ubuntu «python2.7-dbg», поскольку, насколько я знаю, такого пакета для python 3.4 еще нет, и даже если бы это было так, программы, которые я хочу отлаживать запускать python 2.7

Мой вопрос: как я могу использовать интерпретатор, которого я хочу?

[EDIT] Не удаляйте python3 кстати. Я сделал это на ubuntu 14.04, и это разрушило мою систему. Не удалось получить его снова. В настоящее время я использую его без оконного менеджера (это классно и 1337), но вы получаете идею.

+1

Почему python 3 по умолчанию? –

+0

Я думаю, потому что Ubuntu так говорит.? я не много читал в нем, но https://wiki.ubuntu.com/Python/3 это говорит о том, что многие скрипты были перенесены на python 3 (хотя и не все). В любом случае мой gdb устанавливает (или компилирует или что-то еще) в сочетании с python3 –

+0

Связанная проблема: https://bugs.launchpad.net/ubuntu/+source/gdb/+bug/1241668 –

ответ

14

Таким образом, хотя GDB говорит, что использует мой 2.7 интерпретатор

GDB не говорит, что. В нем говорится, что он использует 3.4.0, и этот интерпретатор связан с GDB, в форме libpython3.4.a или libpython3.4.so.

Поскольку нет действительного бинарного Python, ошибка (незначительная) здесь заключается в том, что sys.executable возвращает /usr/bin/python. Возможно, лучше было бы вернуть /usr/bin/gdb.

мне нужен переводчик 2.7

В этом случае вы должны восстановить gdb от источника, после его настройки с соответствующим --with-python значения.

+0

Могу ли я узнать, как мой gdb является bullt? (Я имею в виду, с какими параметрами?) –

+1

@ChanKim: чтобы посмотреть, какая версия библиотеки Python связана с вашим установленным GDB, попробуйте 'ldd $ (which gdb) | grep python' – kevinarpe

+1

@kevinarpe Метод, который вы предлагаете, работает только в том случае, если gdb динамически связан с libpython. Используемый метод OP ('print (sys.версия) ') работает * always *. –