2014-10-07 6 views
19

Używam Ubuntu 14.04, gdzie python3 jest domyślnym pakietem systemowym.Jak zmienić interpretera Pythona, którego używa gdb?

chcę debugować programy Python2.7 z gdb, ale wydaje mi się napotkać ten problem:

kiedy jestem w gdb, używając komendy py stawia mnie w tłumacza, więc pobiegł w tych poleceń interpreter:

Najpierw należy sprawdzić wersję interpretera:

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

Potem sprawdź co interpreter wykonywalny jest używany

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

Następnie w bash, sprawdzić tłumacza:

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

Więc chociaż gdb mówi, że przy moim 2.7 tłumacza, to faktycznie za pomocą innego. Potrzebuję interpretera 2.7, aby móc go używać z pythonowymi rozszerzeniami określonymi w pakiecie "python2.7-dbg" pakietu ubuntu, ponieważ o ile mi wiadomo, nie ma takiego pakietu dla Pythona 3.4, a nawet jeśli był, programy, które chcę debugować, uruchamiają pythona 2.7

Moje pytanie brzmi: w jaki sposób mogę użyć tłumacza, którego chcę?

[EDIT] Nie odinstalować python3 btw. Zrobiłem to na Ubuntu 14.04 i zrujnowało mój system. Nie udało się uzyskać tego ponownie. Obecnie używam go bez menedżera okien (jest fajny i 1337), ale masz pomysł.

+1

dlaczego Pythona 3 jest domyślny? –

+0

Zgaduję, ponieważ Ubuntu tak mówi ...? nie czytałem dużo, ale https://wiki.ubuntu.com/Python/3 mówi to, że wiele skryptów zostało przeniesionych do Pythona 3 (choć nie wszystkie). W każdym razie moja instalacja gdb (lub kompilacja lub cokolwiek innego) w połączeniu z python3 –

+0

Powiązany numer: https://bugs.launchpad.net/ubuntu/+source/gdb/+bug/1241668 –

Odpowiedz

14

Więc chociaż gdb mówi, że przy moim 2.7 tłumacza

GDB nie powiedzieć. Mówi, że używa 3.4.0, a ten interpreter jest podłączony do GDB, w postaci libpython3.4.a lub libpython3.4.so.

Ponieważ nie ma faktycznego binarnego Python, błąd (tutaj) jest to, że sys.executable zwraca /usr/bin/python. Byłoby lepiej, gdyby zamiast niego powrócił /usr/bin/gdb.

muszę 2.7 tłumacza

W takim przypadku trzeba będzie odbudować gdb ze źródła, po skonfigurowaniu go z odpowiednią wartością --with-python.

+0

Czy mogę wiedzieć, w jaki sposób mój GDB jest Bullt? (Mam na myśli jakie opcje?) –

+1

@ChanKim: Aby zobaczyć, która wersja biblioteki Pythona jest połączona z zainstalowanym GDB, wypróbuj 'ldd $ (gdb) | grep python' – kevinarpe

+1

@kevinarpe Proponowana metoda działa tylko wtedy, gdy gdb jest dynamicznie połączone z libpythonem. Zastosowana metoda OP ('print (sys.wersja) ') działa * zawsze *. –