def METHOD_NAME(self, address: int, fname: str, pargs: Sequence[Tuple[str, str]], ret: Union[int, str, None], passthru: bool):
    '''Print out function invocation detais.
    Args:
        address: fucntion address
        fnamr: function name
        pargs: processed args list: a sequence of 2-tuples consisting of arg names paired to string representation of arg values
        ret: function return value, or None if no such value
        passthru: whether this is a passthrough invocation (no frame unwinding)
    '''
    if fname.startswith('hook_'):
        fname = fname[5:]
    def __assign_arg(name: str, value: str) -> str:
        # ignore arg names generated by variadric functions
        if name.startswith(QlOsUtils.ELLIPSIS_PREF):
            name = ''
        return f'{name} = {value}' if name else f'{value}'
    # arguments list
    fargs = ', '.join(__assign_arg(name, value) for name, value in pargs)
    if type(ret) is int:
        ret = f'{ret:#x}'
    # optional prefixes and suffixes
    fret = f' = {ret}' if ret is not None else ''
    fpass = f' (PASSTHRU)' if passthru else ''
    faddr = f'{address:#0{self.ql.arch.bits // 4 + 2}x}: ' if self.ql.verbose >= QL_VERBOSE.DEBUG else ''
    log = f'{faddr}{fname}({fargs}){fret}{fpass}'
    if self.ql.verbose >= QL_VERBOSE.DEBUG:
        self.ql.log.debug(log)
    else:
        self.ql.log.info(log)