1*061da546Spatrickimport lldb 2*061da546Spatrick 3*061da546Spatrick 4*061da546Spatrickdef pyobj_summary(value, unused): 5*061da546Spatrick if value is None or value.IsValid() == False or value.GetValueAsUnsigned(0) == 0: 6*061da546Spatrick return "<invalid>" 7*061da546Spatrick refcnt = value.GetChildMemberWithName("ob_refcnt") 8*061da546Spatrick expr = "(char*)PyString_AsString( (PyObject*)PyObject_Str( (PyObject*)0x%x) )" % ( 9*061da546Spatrick value.GetValueAsUnsigned(0)) 10*061da546Spatrick expr_summary = value.target.EvaluateExpression( 11*061da546Spatrick expr, lldb.SBExpressionOptions()).GetSummary() 12*061da546Spatrick refcnt_value = "rc = %d" % (refcnt.GetValueAsUnsigned(0)) 13*061da546Spatrick return "%s (%s)" % (expr_summary, refcnt_value) 14*061da546Spatrick 15*061da546Spatrick 16*061da546Spatrickdef __lldb_init_module(debugger, unused): 17*061da546Spatrick debugger.HandleCommand( 18*061da546Spatrick "type summary add PyObject --python-function pysummary.pyobj_summary") 19*061da546Spatrick debugger.HandleCommand( 20*061da546Spatrick "type summary add lldb_private::PythonObject -s ${var.m_py_obj%S}") 21*061da546Spatrick debugger.HandleCommand( 22*061da546Spatrick "type summary add lldb_private::PythonDictionary -s ${var.m_py_obj%S}") 23*061da546Spatrick debugger.HandleCommand( 24*061da546Spatrick "type summary add lldb_private::PythonString -s ${var.m_py_obj%S}") 25