GDB kullanarak python yığını izleme bilgilerini nasıl alabilirim?


11

Kubuntu 12.04 üzerindeki python uygulamamda bir segmentasyon hatası ayıklamak için GDB kullanıyorum. GDB sürüm 7, python yığını (http://docs.python.org/devguide/gdb.html) hakkında bilgi ayıklamak için yerleşik makrolara sahip, ancak işe almakta sorun yaşıyorum. Python-dbg'yi yükledim.

GDB bir python yığın izleme istediğimde, sonuç şöyle görünür:

(gdb) py-bt
#5 (unable to read python frame information)
#16 (unable to read python frame information)
#26 (unable to read python frame information)
...

GDB sürümüm 7.4-2012.04-0ubuntu2, Python 2.7.3-0ubuntu3.

Yanıtlar:


16

Sorun şu: GDB'de hata ayıklama sembollerine erişmek için farklı bir ikili dosya çağırmalısınız: "python" yerine "python-dbg" (/usr/share/doc/python2.7-dbg/README.debug içinde bulundu) ).


1
Bunun fedoraproject.org/wiki/Features/EasierPythonDebugging'de veya bulabileceğim başka bir yerde nasıl bahsedilmediğini şaşırtıcı . Teşekkürler Luke.
14:52

Bu doğru değil. Sadece kullandığınız python ile eşleşen hata ayıklama sembolleri almak zorunda. Bir sanal ağ ile uğraşırsanız, python sisteminizin python'uyla eşleşmeyebilir. Podoliaka.org/2016/04/10/debugging-cpython-gdb
aggieNick02

6

Ubuntu 16.04'te Python 3.5'te Python yığın izini almayı başardım:

  1. Yükleme python3-dbgve python3-dev:

    $ sudo apt install python3-dbg python3-dev

    python3-dbgpaketi /usr/share/doc/python3-dbg/README.debug, bir sonraki adımda kullanacağım kısa belgelerle birlikte gelir .

  2. Paketlenmemiş GDB yardımcı komut ekleme /usr/share/doc/python3.5/gdbinit.gziçin ~/.gdbinit:

    zcat /usr/share/doc/python3.5/gdbinit.gz >> ~/.gdbinit

Şimdi gdb, Python ikili için sembolleri bulabilecek ve py-btPython yığın izlemesini gdb'de görüntülemek için çalışacaktır:

$ gdb -p 4762
GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.04) 7.11.1
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word".
Attaching to process 4762
[New LWP 4852]
[New LWP 4853]
[New LWP 4854]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
0x00007f38e43deb5d in poll () at ../sysdeps/unix/syscall-template.S:84
84      ../sysdeps/unix/syscall-template.S: No such file or directory.
(gdb) py-bt
Traceback (most recent call first):
  File "/usr/bin/indicator-cpufreq", line 80, in <module>
    Gtk.main()
(gdb)

Ubuntu 16.04'teki gdbinit.gz gibi birçok komut içeriyor, pystackancak yok py-bt. Neler olduğu hakkında bir fikrin var mı?
Anton

python 3.5Zaten yüklememe rağmen neden python 3.6?
skytree

0

Belki bu birine yardımcı olur: İkili paketten python2.7-dbggelen Debian sistemimde adlandırılır python2.7-dbg. python2.7-devPaketi de kurdum ve apt-get source python2.7-dbgböylece gdbPython yorumlayıcısına kaynak dosyaları bulabildim.

Tüm bunlar yerinde olduğunda, SIGSEGViçine girdiğim hata ayıklamayı başardım : https://bugs.python.org/issue34870

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.