Fix converting a remote PyStringObject to a local string
authorMark Florisson <markflorisson88@gmail.com>
Mon, 8 Nov 2010 15:15:23 +0000 (16:15 +0100)
committerMark Florisson <markflorisson88@gmail.com>
Mon, 8 Nov 2010 15:15:23 +0000 (16:15 +0100)
Cython/Debugger/libcython.py
Cython/Debugger/libpython.py

index 6208777c7f6a2309c3bc4f199994d10090f71558..dd3c99607986e8c6717f5b4e4379bf7c006b6202 100644 (file)
@@ -244,13 +244,8 @@ class CythonBase(object):
             if not pyframeobject:
                 raise gdb.GdbError('Unable to read information on python frame')
 
-            try:
-                filename = pyframeobject.filename()
-            except RuntimeError:
-                filename = None
-                lineno = None
-            else:
-                lineno = pyframeobject.current_line_num()
+            filename = pyframeobject.filename()
+            lineno = pyframeobject.current_line_num()
             
             if pygments:
                 lexer = pygments.lexers.PythonLexer(stripall=False)
@@ -313,10 +308,7 @@ class CythonBase(object):
                 # print this python function as a C function
                 return self.print_stackframe(frame, index, is_c=True)
             
-            try:
-                func_name = str(pyframe.co_name)
-            except RuntimeError:
-                func_name = 'Unknown Function Name'
+            func_name = pyframe.co_name
             func_cname = 'PyEval_EvalFrameEx'
             func_args = []
         elif self.is_cython_function(frame):
index 6d21264465f52fd3c5a63cf1abefba4f888003c9..fb51cda442ae8467b42c38d6fab4f002082c8667 100644 (file)
@@ -975,7 +975,9 @@ class PyStringObjectPtr(PyObjectPtr):
     def __str__(self):
         field_ob_size = self.field('ob_size')
         field_ob_sval = self.field('ob_sval')
-        char_ptr = field_ob_sval.address.cast(_type_unsigned_char_ptr)
+        char_ptr = field_ob_sval.address.cast(
+            gdb.lookup_type('char').pointer())
+        
         return ''.join([chr(char_ptr[i]) for i in safe_range(field_ob_size)])
 
     def proxyval(self, visited):