我想用用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
現在我在調試器中,我應該能夠放入一個折點,但當我 嘗試:
(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。
謝謝對於你的帖子有幫助,但是當我運行確切的東西時,我得不到同樣的東西,我甚至無法得到cython_file(請參閱我的更新)。另外,你似乎從一開始就通過big_sum,而不是從中斷點開始。 – Akavall
用我的setup.py和一個gdb會話更新,我沒有斷點運行,然後用斷點集重新運行。 –
更新了gdb會話以在big_sum上顯示設置斷點,然後在命中第一個斷點時在cython_file.pyx第7行設置第二個斷點。 –