在Ubuntu 16.04上,我通过以下方式设法在Python 3.5中获得了Python堆栈跟踪:
安装python3-dbg
和python3-dev
:
$ sudo apt install python3-dbg python3-dev
python3-dbg
软件包随附了简短的文档,以及如何使用它/usr/share/doc/python3-dbg/README.debug
,我将在下一步中使用它。
将解压缩的GDB帮助程序脚本附加/usr/share/doc/python3.5/gdbinit.gz
到~/.gdbinit
:
zcat /usr/share/doc/python3.5/gdbinit.gz >> ~/.gdbinit
现在,gdb将能够找到Python二进制文件的符号,并py-bt
可以在gdb中显示Python堆栈跟踪:
$ 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)