I'm trying to figure out how to use cygdb to debug extensions built with python 3. I've tested all the debugger commands listed in http://docs.cython.org/src/userguide/debugging.html <http://docs.cython.org/src/userguide/debugging.html> when debugging python 2 extensions and everything works great. But some of the commands seem to be broken when debugging python 3 extensions.
Here are the debugger commands that I've confirmed as working with python 3 extensions: cy break cy step cy next cy run cy cont cy down cy finish .. works but prints error message cy exec cy list cy_lineno() cy_eval() cy_cname() Here are the commands which fail under python 3, and the error message that is given for each: cy up Python Exception <class 'gdb.error'> There is no member named length.: Error occurred in Python command: There is no member named length. cy finish .. works but gives error Python Exception <class 'gdb.error'> There is no member named length.: Error occurred in Python command: There is no member named length. cy bt Python Exception <class 'gdb.error'> There is no member named length.: Error occurred in Python command: There is no member named length. cy print Python Exception <class 'gdb.error'> There is no member named ma_mask.: Python Exception <class 'gdb.error'> Error occurred in Python command: There is no member named ma_mask.: Error occurred in Python command: Error occurred in Python command: There is no member named ma_mask. cy set x = 2 Python Exception <class 'gdb.error'> No symbol "__pyx_v_10helloworld_x" in current context.: Error occurred in Python command: No symbol "__pyx_v_10helloworld_x" in current context. cy locals Python Exception <class 'gdb.error'> There is no member named ma_mask.: Error occurred in Python command: There is no member named ma_mask. cy globals Python Exception <class 'gdb.error'> There is no member named ma_mask.: Error occurred in Python command: There is no member named ma_mask. cy_cvalue() Python Exception <class 'gdb.error'> There is no member named ma_mask.: Error occurred in Python convenience function: There is no member named ma_mask. In summary: - The "cy set" and "cy_cname()" commands seem to be giving incorrect C names for cython variables. I did a grep of the generated .c source file for "__pyx_v_10helloworld_x", and didn't get any hits. Luckily, the "cy exec" command works, so I can use that to get the value of variables as a workaround. - Any commands related to viewing or traversing the call stack seem to give an error related to a missing "length" member. - Commands related to printing the value of a variable complain about a missing "ma_mask" member. Here are the source files I used for the test: helloworld.py: import helloworld helloworld.pyx: x = 1 y = "a" print("Hello World 1") print("Hello World 2") print("Hello World 3") print("Hello World 4") print("Hello World 5") print("Hello World 6") print("Hello World 8") print("Hello World 9") print("Hello World 10") setup.py: from distutils.core import setup from Cython.Build import cythonize from distutils.extension import Extension extensions = [Extension("helloworld", ["helloworld.pyx"])] setup(ext_modules=cythonize(extensions, gdb_debug=True, output_dir=".")) To compile I ran: python setup.py build_ext --inplace To debug, I ran: cygdb -vv . -- --args python helloworld.py Here is my python version: Python 3.4.2 I used pyenv (https://github.com/yyuu/pyenv <https://github.com/yyuu/pyenv>) to build and install the latest Python 3 version with debugging symbols enabled. Ben
_______________________________________________ cython-devel mailing list cython-devel@python.org https://mail.python.org/mailman/listinfo/cython-devel