Comment déboguer un Python erreur de segmentation?

Comment puis-je débogage Python erreur de segmentation?

Nous essayons d'exécuter notre code python sur SuSE 12.3. Nous obtenons reproductible segmentation des défauts. Le code python a été de travailler sur d'autres plates-formes sans segmentation des défauts, des années.

Nous n'code Python, n ° C-extension ....

Quelle est la meilleure façon de débogage? Je connais un peu le c ansi, mais c'était il y a dix ans ....

Python 2.7.5

Mise à jour

La faute de segmentation qui se passe sur l'interprète de l'arrêt.

Je peux exécuter le script plusieurs fois:

python -m pdb myscript.py arg1 arg1
continue
run
continue
run

Mais la segmentation des défauts se produisent, si je laisse la pdb avec ctrl-d.

Mise à jour 2

J'essaie maintenant de le déboguer avec gdb:

gdb 
> 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

Mise à jour 3

J'ai installé gdbinit de http://hg.python.org/cpython/file/default/Misc/gdbinit
et les symboles de débogage à partir de http://download.opensuse.org/debug/distribution/12.3/repo/oss/suse/x86_64/

(gdb) pystack
No symbol "_PyUnicode_AsString" in current context.

Quoi maintenant?

Mise à jour 4
Nous avons installé un nouveau TR /min (python 2.7.5-3.1.x86_64). Nous obtenons moins de segmentation, mais ils se produisent encore.
Voici le lien vers le référentiel:

http://download.opensuse.org/repositories/devel:/languages:/python:/Factory/openSUSE_12.3/x86_64/

Mise à jour 5
Résolu mon problème initial:

Il a été http://bugs.python.org/issue1856 (arrêt (sortie) peut se bloquer ou erreur de segmentation avec les fils de démon en cours d'exécution)

Connexes: Détecter Interprète arrêter en fil de démon

InformationsquelleAutor guettli | 2013-05-24