- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 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 shell 中所做的:
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.
如何正确设置断点?
更新:即使使用 Drew McInnis 提供的 setup.py,我仍然遇到问题:
user@Ubuntu-K56CA:~/PythonStuff/CythonStuff/cython_debug_2$ cython --gdb cython_file.pyx
user@Ubuntu-K56CA:~/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
user@Ubuntu-K56CA:~/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
我注意到我收到此警告:
user@Ubuntu-K56CA:~/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.so
共享库在导入模块之前,解释器不会加载由 cython 创建的文件。因此,pending gdb 断点没问题,因为当 cython_file.so
时 gdb 会设置此断点动态加载。
更新1:我确实根据发布的内容稍微修改了setup.py
。我的 setup.py
基于这些 cython debugging instructions ...主要区别在于 cythonize 的使用:
setup.py
from distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize
setup(
extensions = [Extension('cython_file', ["cython_file.pyx"])],
ext_modules=cythonize(Extension("cython_file", ["cython_file.pyx"]),
gdb_debug=True)
)
更新 3:作为引用,以下是我用于进行设置的命令。它们与问题中发布的内容略有不同,因为我在运行 setup.py 时没有添加 --pyrex-gdb
选项:
$ ls
cython_file.pyx python_file.py setup.py
$ cython --gdb cython_file.pyx
$ python setup.py build_ext --inplace
更新2:这是我使用您的文件的示例cygdb
session ,首先我让python_file.py
运行完成,然后我设置断点并重新运行:
drew@ubuntu:~/stackoverflow/21033553-cython$ cygdb .
GNU gdb (Ubuntu/Linaro 7.4-2012.04-0ubuntu2.1) 7.4-2012.04
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://bugs.launchpad.net/gdb-linaro/>.
Install pygments for colorized source code.
Python was not compiled with debug symbols (or it was stripped).
Some functionality may not work (properly).
(gdb) cy run python_file.py
499500
(gdb) cy break cython_file.big_sum
Breakpoint 1 at 0x7ffff5db0270: file cython_file.c, line 435.
No frame is currently selected.
(gdb) cy run python_file.py
3 def big_sum():
(gdb) cy break :10
Breakpoint 2 at 0x7ffff5db02a6: file cython_file.c, line 468.
(gdb) cy cont
11 for i in range(1000):
(gdb) cy list
6 for i in range(10000):
7 a[i] = i
8 # <==================== I want to put a break here
9 cdef int my_sum
10 my_sum = 0
> 11 for i in range(1000):
12 my_sum += a[i]
13 return my_sum
14
关于debugging - Cython调试,打断点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21033553/
我正在使用原味 Markdown ,如here所述. 我想知道是否可以在 Markdown 代码中打断长行,同时不会产生语法效果。 (在其他语言中,例如 shell 脚本和 C,\ 将用于继续下一行。
我在显示从 0-10K 运行的图时遇到了问题。目前我有从 0-100 运行的计算,它看起来很棒。 目前: 现在我想加一个 X 点,也就是 10K它看起来是这样的: 如何将它保持在 0-100 之间,然
我在更广泛的范围内问这个问题,因为我现在没有面临这个具体问题,但我想知道将来该怎么做。 如果我有一个长时间运行的 python 脚本,它应该一直在做某事(如果有帮助的话,可以是一个无限循环)。通过在终
主题:利用python画图实现坐标轴截断或打断 关键词:python, plot, matplotlib, break axes 方法一: 首先介绍一种简单快速的方法――调用包 brokena
如果运行此代码并单击 P,整个捕获阶段将执行,但冒泡阶段将按预期在 div 上停止。这段代码有什么问题? for(let elem of document.querySelectorAll('*'
那是通常的“让 img 旁边的东西垂直居中”,但我需要两行。一行就好了,但看起来像 破坏它。 Centered text 结果: IMG IMG text here IMG 但是如果我想这样做:
我在 GNU/Linux 下用 C 语言编程的多线程服务器中有这种奇怪的行为。当它正在发送数据时,最终会被 SIGPIPE 中断。因此,我设法忽略了 send() 中的信号并在每次操作后处理 errn
我有一个 ListView,它有一个方法 (public ArrayAdapter populateListView(){}) 来更新适配器。我每 500 毫秒调用一次 lv.setAdapter(p
我想将 div 堆叠在一起并在三个子元素之后打断 div。 示例 HTML: hello hello hello hello hello hello
我是一名优秀的程序员,十分优秀!