Come è possibile eseguire il debug di un errore di segmentazione Python?Come eseguire il debug di un errore di segmentazione Python?
Stiamo provando a eseguire il nostro codice Python su SuSE 12.3. Otteniamo errori di segmentazione riproducibili. Il codice python ha funzionato su altre piattaforme senza errori di segmentazione, per anni.
Abbiamo solo codice Python, senza estensione C ....
Qual è il modo migliore per eseguire il debug di questo? Conosco un po 'ANSI C, ma che è stato dieci anni fa ....
Python 2.7.5
Aggiornamento
L'errore di segmentazione avviene su arresto interprete.
posso eseguire lo script più volte:
python -m pdb myscript.py arg1 arg1
continue
run
continue
run
Ma i difetti di segmentazione accadere, se lascio il PDB con CTRL-D.
Update 2
io ora cerco di eseguire il debug con 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
Aggiornamento 3
ho installato gdbinit da http://hg.python.org/cpython/file/default/Misc/gdbinit e simboli di debug da http://download.opensuse.org/debug/distribution/12.3/repo/oss/suse/x86_64/
(gdb) pystack
No symbol "_PyUnicode_AsString" in current context.
Che ora?
Aggiornamento 4 Abbiamo installato un nuovo RPM (python-2.7.5-3.1.x86_64). Otteniamo meno segfault, ma succedono ancora. ecco il link al repository:
http://download.opensuse.org/repositories/devel:/languages:/python:/Factory/openSUSE_12.3/x86_64/
Update 5 Ha risolto il problema iniziale:
Era http://bugs.python.org/issue1856 (shutdown (uscita) può appendere o segfault con fili demone in esecuzione)
Correlati: Detect Interpreter shut down in daemon thread
Sto anche ottenendo segfault sulla chiusura della mia domanda. Come correggere questo bug per python 2.7? – Patrick
@Patrick Vedi http://stackoverflow.com/a/18099067/633961 – guettli