Commit 29e61a09 authored by Mark Florisson's avatar Mark Florisson

Put debugger startup code in Cython.Debugger.cygdb

Fixed small autocompletion bug
parent 8a10a7ea
#!/usr/bin/env python
"""
The Cython debugger
The current directory should contain a directory named 'cython_debug', or a
path to the cython project directory should be given (the parent directory of
cython_debug).
"""
import os
import sys
import glob
import tempfile
import subprocess
def main(import_libpython=False, path_to_debug_info=os.curdir):
"""
Start the Cython debugger. This tells gdb to import the Cython and Python
extensions (libpython.py and libcython.py) and it enables gdb's pending
breakpoints
import_libpython indicates whether we should just 'import libpython',
or import it from Cython.Debugger
path_to_debug_info is the path to the cython_debug directory
"""
debug_files = glob.glob(
os.path.join(path_to_debug_info, 'cython_debug/cython_debug_info_*'))
if not debug_files:
sys.exit('No debug files were found in %s. Aborting.' % (
os.path.abspath(path_to_debug_info)))
fd, tempfilename = tempfile.mkstemp()
f = os.fdopen(fd, 'w')
f.write('set breakpoint pending on\n')
f.write('python from Cython.Debugger import libcython\n')
if import_libpython:
f.write('python import libpython')
else:
f.write('python from Cython.Debugger import libpython\n')
f.write('\n'.join('cy import %s\n' % fn for fn in debug_files))
f.close()
p = subprocess.Popen(['gdb', '-command', tempfilename])
while True:
try:
p.wait()
except KeyboardInterrupt:
pass
else:
break
os.remove(tempfilename)
\ No newline at end of file
...@@ -227,8 +227,8 @@ class CyBreak(gdb.Command): ...@@ -227,8 +227,8 @@ class CyBreak(gdb.Command):
@dont_suppress_errors @dont_suppress_errors
def complete(self, text, word): def complete(self, text, word):
names = itertools.chain(functions_by_qualified_name, functions_by_name) names = itertools.chain(functions_by_qualified_name, functions_by_name)
lastword = text.strip().split()[-1] words = text.strip().split()
if '.' in lastword: if words and '.' in words[-1]:
compl = [n for n in functions_by_qualified_name compl = [n for n in functions_by_qualified_name
if n.startswith(lastword)] if n.startswith(lastword)]
else: else:
...@@ -291,7 +291,8 @@ class CyPrint(gdb.Command): ...@@ -291,7 +291,8 @@ class CyPrint(gdb.Command):
try: try:
cython_function = self._get_current_cython_function() cython_function = self._get_current_cython_function()
except NoCythonFunctionNameInFrameError: except NoCythonFunctionNameInFrameError:
print 'Unable to determine the name of the function in the current frame.' print('Unable to determine the name of the function in the '
'current frame.')
except RuntimeError, e: except RuntimeError, e:
print e.args[0] print e.args[0]
else: else:
......
#!/usr/bin/env python #!/usr/bin/env python
import sys import sys
from Cython.Debugger import cygdb from Cython.Debugger import cygdb
if __name__ == '__main__': if __name__ == '__main__':
......
#!/usr/bin/env python #!/usr/bin/env python
import sys import sys
from Cython.Debugger import cygdb from Cython.Debugger import cygdb
if __name__ == '__main__': if __name__ == '__main__':
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment