<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def breakpoint_info(self, handle=0, index=-1):
 """Returns the information about a set breakpoint. Note: Either ``handle`` or ``index`` can be specified. If the ``index`` is not provided, the ``handle`` must be set, and vice-versa. If both ``index`` and ``handle`` are provided, the ``index`` overrides the provided ``handle``. Args: self (JLink):
 the ``JLink`` instance handle (int):
 option handle of a valid breakpoint index (int):
 optional index of the breakpoint. Returns: An instance of ``JLinkBreakpointInfo`` specifying information about the breakpoint. Raises: JLinkException: on error. ValueError: if both the handle and index are invalid. """

        if index < 0 and handle == 0:
            raise ValueError('Handle must be provided if index is not set.')

        bp = structs.JLinkBreakpointInfo()
        bp.Handle = int(handle)
        res = self._dll.JLINKARM_GetBPInfoEx(index, ctypes.byref(bp))
        if res < 0:
            raise errors.JLinkException('Failed to get breakpoint info.')

        return bp