Python bölümlendirme hatasının hatalarını nasıl ayırım?Python segmentasyon hatası nasıl hata ayıklanır?
Python kodumuzu SuSE 12.3'te çalıştırmaya çalışıyoruz. Tekrarlanabilir bölümleme hataları var. Python kodu yıllardır segmentasyon hataları olmaksızın diğer platformlarda çalışıyor.
Biz sadece kod Python, hiçbir C uzantısı ....
bu hata ayıklamak için en iyi yolu nedir? Biraz ansi c biliyorum, ama bu .... on yıl önce Python 2.7.5
Güncelleme segmentasyon hatası tercüman kapatma olur
oldu.
Senaryonun birkaç kez çalıştırabilirsiniz: Ben ctrl-d Pdb bırakırsanız
python -m pdb myscript.py arg1 arg1
continue
run
continue
run
Ama segmentasyon hatası gibi olur.
Şimdi gdb ile hata ayıklamaya çalıştığınızda 2
Güncelleme: http://download.opensuse.org/debug/distribution/12.3/repo/oss/suse/x86_64/
dengdb
> file python
> run myscript.py arg1 arg2
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fffefbe2700 (LWP 15483)]
0x00007ffff7aef93c in PyEval_EvalFrameEx() from /usr/lib64/libpython2.7.so.1.0
(gdb) bt
#0 0x00007ffff7aef93c in PyEval_EvalFrameEx() from /usr/lib64/libpython2.7.so.1.0
#1 0x00007ffff7af5303 in PyEval_EvalCodeEx() from /usr/lib64/libpython2.7.so.1.0
#2 0x00007ffff7adc858 in ??() from /usr/lib64/libpython2.7.so.1.0
#3 0x00007ffff7ad840d in PyObject_Call() from /usr/lib64/libpython2.7.so.1.0
#4 0x00007ffff7af1082 in PyEval_EvalFrameEx() from /usr/lib64/libpython2.7.so.1.0
#5 0x00007ffff7af233d in PyEval_EvalFrameEx() from /usr/lib64/libpython2.7.so.1.0
#6 0x00007ffff7af233d in PyEval_EvalFrameEx() from /usr/lib64/libpython2.7.so.1.0
#7 0x00007ffff7af5303 in PyEval_EvalCodeEx() from /usr/lib64/libpython2.7.so.1.0
#8 0x00007ffff7adc5b6 in ??() from /usr/lib64/libpython2.7.so.1.0
#9 0x00007ffff7ad840d in PyObject_Call() from /usr/lib64/libpython2.7.so.1.0
#10 0x00007ffff7ad9171 in ??() from /usr/lib64/libpython2.7.so.1.0
#11 0x00007ffff7ad840d in PyObject_Call() from /usr/lib64/libpython2.7.so.1.0
#12 0x00007ffff7aeeb62 in PyEval_CallObjectWithKeywords() from /usr/lib64/libpython2.7.so.1.0
#13 0x00007ffff7acc757 in ??() from /usr/lib64/libpython2.7.so.1.0
#14 0x00007ffff7828e0f in start_thread() from /lib64/libpthread.so.0
#15 0x00007ffff755c7dd in clone() from /lib64/libc.so.6
Güncelleme 3
ben http://hg.python.org/cpython/file/default/Misc/gdbinit gelen gdbinit yüklü ve hata ayıklama sembollerini
(gdb) pystack
No symbol "_PyUnicode_AsString" in current context.
Şimdi ne var?
Güncelleme 4 Biz yeni bir RPM (python-2.7.5-3.1.x86_64) kurulu. Daha az segfault aldık ama yine de oluyorlar.
http://download.opensuse.org/repositories/devel:/languages:/python:/Factory/openSUSE_12.3/x86_64/
Güncelleme 5 benim ilk sorun çözüldü: İşte deposuna link
O http://bugs.python.org/issue1856 (kapatma (çıkış) asmak veya arka planını ipler çalışan segfault olabilir)
olduİlgili: Detect Interpreter shut down in daemon thread
Ayrıca başvurumu kapatırken segfault alıyorum. Bu böcek python 2.7 için nasıl düzeltilir? – Patrick
@Patrick Bkz. Http://stackoverflow.com/a/18099067/633961 – guettli