def _addr2line(path, *args):
    '''Return list of filename:linenumbers for
       address(es) in a library or executable.
    '''
     # global _addr2line_bin
    r, a = [], args
     # recurse for long lists
    if len(a) > _ARG_MAX:
        r = _addr2line(path, *a[:_ARG_MAX])
        a = a[_ARG_MAX:]
     # _addr2line_bin prints one filename:linenumber
     # line per address or '??:0' in case of errors
    t = "%s -e %s %s" % (_addr2line_bin, path, ' '.join(a))
    try:
        p = os.popen(t)
        r.extend(p.readlines())
        p.close()
    except:
        _print("%.*s... (%d) failed", 80,t, len(a))
        return []
    if len(r) != len(args):
        _print("%.*s... mismatch: %d vs %d", 80,t, len(r), len(args))
    return r
Return list of filename:linenumbers for
       address(es) in a library or executable.
    
recipes/Python/534147_backtrace2line__stack_traces_source_file_name/recipe-534147.py