Hi

I just pulled the tip out of hg.cython.org/cython-gdb as I’m excited to try 
this out.

However, when running “cython –cplus –debug” on a pyx that I know is correct 
and works, I always get the following output:

  File "C:\Python26\lib\xml\etree\ElementTree.py", line 777, in 
_raise_serialization_error
    "cannot serialize %r (type %s)" % (text, type(text).__name__)
TypeError: cannot serialize None (type NoneType)


I have not yet had the opportunity to try reducing my pyx (it is fairly large 
and getting larger every hour), but is this any kind of known problem – what 
might be causing it?

Here’s the full traceback:

  File "/projects/ctg/build/bin/cython.py", line 3, in <module>
    main(command_line = 1)
  File "C:\Python26\lib\site-packages\Cython\Compiler\Main.py", line 780, in 
main
    result = compile(sources, options)
  File "C:\Python26\lib\site-packages\Cython\Compiler\Main.py", line 755, in 
compile
    return compile_multiple(source, options)
  File "C:\Python26\lib\site-packages\Cython\Compiler\Main.py", line 727, in 
compile_multiple
    result = run_pipeline(source, options)
  File "C:\Python26\lib\site-packages\Cython\Compiler\Main.py", line 596, in 
run_pipeline
    err, enddata = context.run_pipeline(pipeline, source)
  File "C:\Python26\lib\site-packages\Cython\Compiler\Main.py", line 237, in 
run_pipeline
    data = phase(data)
  File "C:\Python26\lib\site-packages\Cython\Compiler\Main.py", line 160, in 
generate_pyx_code
    module_node.process_implementation(options, result)
  File "C:\Python26\lib\site-packages\Cython\Compiler\ModuleNode.py", line 72, 
in process_implementation
    self.generate_c_code(env, options, result)
  File "C:\Python26\lib\site-packages\Cython\Compiler\ModuleNode.py", line 
302,in generate_c_code
    self._serialize_lineno_map(env, rootwriter)
  File "C:\Python26\lib\site-packages\Cython\Compiler\ModuleNode.py", line 
327,in _serialize_lineno_map
    tb.serialize()
  File "C:\Python26\lib\site-packages\Cython\Debugger\DebugWriter.py", line 
71,in serialize
    et.write(os.path.join(self.output_dir, fn), encoding="UTF-8", **kw)
  File "C:\Python26\lib\xml\etree\ElementTree.py", line 663, in write
    self._write(file, self._root, encoding, {})
  File "C:\Python26\lib\xml\etree\ElementTree.py", line 707, in _write
    self._write(file, n, encoding, namespaces)
  File "C:\Python26\lib\xml\etree\ElementTree.py", line 698, in _write
    _escape_attrib(v, encoding)))
  File "C:\Python26\lib\xml\etree\ElementTree.py", line 830, in _escape_attrib
    _raise_serialization_error(text)
  File "C:\Python26\lib\xml\etree\ElementTree.py", line 777, in _raise_serializa
tion_error
    "cannot serialize %r (type %s)" % (text, type(text).__name__)
TypeError: cannot serialize None (type NoneType)

Regards,
Paul

From: [email protected] 
[mailto:[email protected]] On Behalf Of mark florisson
Sent: 03 November 2010 09:56
To: [email protected]
Subject: Re: [Cython] Cython debugger

Most of the Cython debugger is implemented, it can be pulled from 
hg.cython.org/cython-gdb<http://hg.cython.org/cython-gdb>. To use it, you need 
Cython to export some debug information, which can be done using  'cython 
--debug mymod.pyx', or 'python setup.py build_ext --pyrex-debug'. You can also 
pass 'pyrex_debug=True' as an argument to Cython.Distutils.extension.Extension.
You can then start gdb by typing 'cygdb'  (which should be installed as a 
script) in your project directory. Then 'help cy' gives an overview of 
commands. It currently supports breapoints, stepping, stepping-over, 
backtraces, source code listing, going up and down the stack, printing 
variables with regard to context, listing locals or globals and running and 
continuing the program. If pygments is installed it will colorize source code 
which is configurable through cy_* parameters.

It basically works on three levels: the Python, Cython and C level. Depending 
on the context cygdb does the right thing. For stepping it considers the 
following stack frames relevant: any Python frame, any Cython frame and any C 
frame from a C function called directly by Cython user-code.

So, it would be great if some people could test and try it (unit tests are 
written but some system testing is always great). It works with gdb 7.2 (the 
7.1 python api was too incomplete and broken). So if you guys like it I could 
write documentation that explains to Cython users how to install and use it. 
Any suggestion or criticism is most welcome!

The Python support (libpython.py) was also modified. I'd like to push this 
mainstream (and process any suggestions and criticism) before supplying a patch 
to Python.

Kind regards,

Mark

On 15 September 2010 17:49, Robert Bradshaw 
<[email protected]<mailto:[email protected]>> wrote:
On Wed, Sep 15, 2010 at 2:55 AM, mark florisson
<[email protected]<mailto:[email protected]>> wrote:

>> It ought to be possible to do something similar with cython code.  It
>> may not even be necessary to modify cython: perhaps some searching for
>> locals named "__pyx_*" iirc would get you 70% of the way there?
>
> Although that sounds like a wonderful idea, I think there are also
> issues with that. One issue is that a user must be able to set Cython
> breakpoints before the Cython module would be loaded, and for that the
> symbol name would be needed beforehand. Also, I don't know if these
> mangled names are consistent now and in the future and if you would be
> able to unambiguously associate a Cython variable name with a mangled
> name.
Mangled names are deterministic and, though they're not guaranteed to
be consistent from release to release, almost always are.

>> I can attest that having the prettyprinters enabled does make it much
>> easier to debug cython code: all of the PyObject* get prettyprinted.
>
> I've been looking at the code and this is pretty neat. I did encounter
> some issues, for instance if you load the script before loading the
> python interpreter you get this traceback because these types are not
> defined at that time:
>
> Traceback (most recent call last):
>  File "<string>", line 1, in <module>
>  File ".libpython.py", line 49, in <module>
>    _type_size_t = gdb.lookup_type('size_t')
> RuntimeError: No type named size_t.
>
> So I think it would be a good idea to not make that code module-level.
>
>>
>> One other thought: if it's possibly to expose the cython structures in
>> some meaningful way, perhaps we could change upstream python's gdb hooks
>> to simply integrate them into the py-* commands I mentioned above? (so
>> e.g. cython c functions get somehow treated as python frames; currently
>> I have a test predicate:
>>  Frame.is_evalframeex()
>> which perhaps could be generalized?)
>>
>> (Not sure; it would complicate the selftests within python itself)
>>
>
> I think it would be hard to make them actual Python frames because
> creating frames in the inferior process from gdb is probably quite
> dangerous, and the alternative would be to modify Cython so that it
> creates Python stack frames (this sounds feasible but I think it might
> be a little bit of work). However, if this could be done (it would
> only do so if this 'debug' flag is active), then tracebacks and locals
> inspection etc wouldn't need special attention and the code would
> appear as normal Python code (apart from the Code objects obviously).
> However, this would form a problem for non-primitive C-type Cython
> variables.
>
> So at the very least we could have a 'py-locals' or some such command
> that would show the value of all the locals (the Python locals would
> be printed by py-print and C locals by gdb print). For regular python
> code it would show the locals from the current stack frame. For the
> Cython part to work we would need information from the Cython compiler
> because we wouldn't want to list any temporary or irrelevant
> variables.
Yes, this is what I was thinking, at least in terms of exposing stuff
to pdb (which is a complementary project). BTW, frames are already
created for functions when profiling is enabled.

> So I think we should be able to integrate these two projects into one
> fruitful project, and with proper documentation it could help both
> regular Python users and Cython users.
+1

- Robert
_______________________________________________
Cython-dev mailing list
[email protected]<mailto:[email protected]>
http://codespeak.net/mailman/listinfo/cython-dev

_______________________________________________
Cython-dev mailing list
[email protected]
http://codespeak.net/mailman/listinfo/cython-dev

Reply via email to