def invoke(self, obj: gdb.Value, type: gdb.Value) -> gdb.Value:
        try:
            type_string = type.string()
        except gdb.error:
            raise gdb.error('the second argument must be literal string')

        try:
            dispatch = self._dispatch[parse_type(obj)]
        except KeyError:
            raise gdb.error(
                'the first argument must be of supported types: interface, literal address, void*'
            )

        return dispatch(obj, type_string)
 def string_value(self, value: gdb.Value) -> str:
     return value.string()