Я пытаюсь использовать Cython отладчик положить в точке разрыва: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
Теперь я нахожусь внутри отладчика, и я должен быть в состоянии поставить точку останова, но когда i попробуйте:
(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.
Как правильно установить точку разрыва?
Update: Я до сих пор есть проблемы, даже когда я использую setup.py предоставленный Дрю McInnis:
[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.
Спасибо для вашего сообщения это помогает, но когда я запускаю точный результат вашего запуска, я не получаю то же самое, что и вы, я даже не могу попасть в cython_file (см. мое обновление). Кроме того, кажется, что вы переходите через big_sum с самого начала, начиная от точки останова. – Akavall
Обновлен с помощью моей setup.py и сеанса gdb, где я запускаю без контрольных точек, а затем повторно запускаю с помощью набора точек останова. –
Обновлен сеанс gdb, чтобы показать настройку точки останова на big_sum, а затем установить вторую точку останова на строке cython_file.pyx 7 после первой точки останова. –