Я пытаюсь использовать отладчик cython для установки точки останова:
Вот мой код:
cython_file.pyx
cimport cython
def big_sum():
cdef int a[10000]
for i in range(10000):
a[i] = i
# <==================== I want to put a break here
cdef int my_sum
my_sum = 0
for i in range(1000):
my_sum += a[i]
return my_sum
python_file.py
from cython_file import big_sum
result = big_sum()
print result
setup.py
from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
setup(
cmdclass = {'build_ext': build_ext},
ext_modules = [Extension("cython_file",
["cython_file.pyx"], pyrex_gdb=True,
extra_compile_args=["-g"], extra_link_args=["-g"])]
)
Я следил за этим guide:
Это то, что я сделал в оболочке ubuntu:
cython --gdb cython_file.pyx
python setup.py build_ext --inplace
cygdb
Теперь я нахожусь внутри отладчика, и я должен быть в состоянии поставить точку останова, но когда я попробуйте:
(gdb) cy break cython_file.big_sum :8
I get this error:
Function "__pyx_pw_11cython_file_1big_sum" not defined.
Breakpoint 1 (__pyx_pw_11cython_file_1big_sum) pending.
No frame is currently selected.
Как правильно установить точку прерывания?
Обновление. У меня все еще проблема, даже когда я использую setup.py, предоставленный Дрю Макиннисом:
[email protected]:~/PythonStuff/CythonStuff/cython_debug_2$ cython --gdb cython_file.pyx
[email protected]:~/PythonStuff/CythonStuff/cython_debug_2$ python setup.py build_ext --inplace
/usr/lib/python2.7/distutils/dist.py:267: UserWarning: Unknown distribution option: 'extensions'
warnings.warn(msg)
running build_ext
building 'cython_file' extension
gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/python2.7 -c cython_file.c -o build/temp.linux-x86_64-2.7/cython_file.o
gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,-z,relro build/temp.linux-x86_64-2.7/cython_file.o -o /home/user/PythonStuff/CythonStuff/cython_debug_2/cython_file.so
[email protected]:~/PythonStuff/CythonStuff/cython_debug_2$ cygdb .
GNU gdb (GDB) 7.5-ubuntu
Copyright (C) 2012 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".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
(gdb) cy run python_file.py
499500
(gdb) cy break cython_file.big_sum
Breakpoint 1 at 0x7ffff63e7780: file cython_file.c, line 649.
(gdb) cy run python_file.py
1 cimport cython
Я замечаю, что получаю это предупреждение:
[email protected]:~/PythonStuff/CythonStuff/cython_debug_2$ python setup.py build_ext --inplace
/usr/lib/python2.7/distutils/dist.py:267: UserWarning: Unknown distribution option: 'extensions
Может быть, проблема?
Я использую Cython версии 0.19.1, Python 2.7.3 и ubuntu 12.10.