Comment puis-je déboguer une erreur de segmentation Python?Comment déboguer une erreur de segmentation Python?
Nous essayons d'exécuter notre code python sur SuSE 12.3. Nous obtenons des fautes de segmentation reproductibles. Le code python a fonctionné sur d'autres plateformes sans failles de segmentation, pendant des années.
Nous ne Python de code, pas d'extension C ....
Quelle est la meilleure façon de débugger? Je connais un peu ansi c, mais c'était il y a dix ans ....
Python 2.7.5
Mise à jour
Le défaut de segmentation se produit lors de l'arrêt de l'interpréteur.
je peux exécuter le script plusieurs fois:
python -m pdb myscript.py arg1 arg1
continue
run
continue
run
Mais les erreurs de segmentation se produisent, si je laisse le pdb avec ctrl-d.
Mise à jour 2
Je vais maintenant essayer de 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 de http://download.opensuse.org/debug/distribution/12.3/repo/oss/suse/x86_64/
(gdb) pystack
No symbol "_PyUnicode_AsString" in current context.
Que faire?
Mise à jour 4 Nous avons installé un nouveau RPM (python-2.7.5-3.1.x86_64). Nous obtenons moins de segavages, mais ils arrivent toujours. Voici le lien vers 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 était http://bugs.python.org/issue1856 (arrêt (sortie) peut se bloquer ou segfault avec des fils de démon en cours d'exécution)
En relation: Detect Interpreter shut down in daemon thread
Je reçois également un message de segfault à la fermeture de ma demande. Comment corriger ce bug pour python 2.7? – Patrick
@Patrick Voir http://stackoverflow.com/a/18099067/633961 – guettli