ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek# SSSD and LDB debugging plugins
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek# Activate them by putting:
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek# to your .gdbinit file
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek# To bypass the pretty printer and print the raw values, use the "/r" option:
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek# print /r foobar
6df8895947fbd0a01df92b82d6f418c8202595b2Fabiano Fidêncio return '\n'.join(["%s%s" % ("\t" * indent, part)
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek "Shared code between different string-printing classes"
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek " print an ldb dn "
6df8895947fbd0a01df92b82d6f418c8202595b2Fabiano Fidêncio ret = "{ <%s>\tlinearized:%s }" % (self.val.type,
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek " print a ldb value"
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek ret = "data = %(data)s, length = %(length)s" % self.val
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek return indent_string("{ <%s>\t%s }" % (self.val.type, ret), indent)
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek " print a ldb message element "
6df8895947fbd0a01df92b82d6f418c8202595b2Fabiano Fidêncio ret = "flags = %(flags)s, name = %(name)s, " \
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek return "num_values is not numeric?"
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek return indent_string("{ <%s>\t%s }" % (self.val.type, ret), indent)
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek " print a ldb message "
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek return "num_elements is not numeric?"
6df8895947fbd0a01df92b82d6f418c8202595b2Fabiano Fidêncio ret = "num_elements:\t%s\ndn:\t%s\nelements:\t" % (nels, dn_str)
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek el = LdbMessageElementPrinter(self.val['elements'][i])
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek return indent_string("{ <%s>\n%s }" % (self.val.type, ret), indent)
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek " print a ldb message element "
6df8895947fbd0a01df92b82d6f418c8202595b2Fabiano Fidêncio ret = "count = %(count)s, extended = %(extended)s, " \
6df8895947fbd0a01df92b82d6f418c8202595b2Fabiano Fidêncio "controls = %(controls)s, refs = %(refs)s" % self.val
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek return indent_string("{ <%s>\t%s }" % (self.val.type, ret), indent)
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek " print a struct sysdb attrs "
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek el = LdbMessageElementPrinter(self.val['a'][i])
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek return indent_string("{ <%s>\t%s }" % (self.val.type, ret), indent)
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek# --- register pretty printers ---
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek if str(val.type) == 'struct ldb_message_element':
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek# --- set a breakpoint at the tevent_req finish fn ---
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek """Break at the tevent finish location """
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek super(TeventBreak, self).__init__("tbr", gdb.COMMAND_BREAKPOINTS)
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek print('cannot determine the type of the variable')
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek print('wrong attribute - must be a tevent_req pointer')
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek print("No async function defined?")
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek print("Cannot get function address")