mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
This mostly works. I haven't yet set up pulling down the system binaries from the device to the host so that symbols appear correctly, but I'll do that in the next patch. One of the crazy things this patch adds it a script to watch for loads on adb logcat and set up mappings from the cache library names to the symboled binaries in the out directory. Presumably other scripts may want to share this functionality so I've made it its own script. Better would be to have mojo_shell spit out a file including the cache mapping information and we could watch that file instead of logcat, but this works for now. R=qsr@chromium.org BUG= Review URL: https://codereview.chromium.org/848013004
65 lines
2.2 KiB
Python
Executable File
65 lines
2.2 KiB
Python
Executable File
#!/usr/bin/env python
|
|
# Copyright 2015 The Chromium Authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
import argparse
|
|
import logging
|
|
import os
|
|
import re
|
|
import sys
|
|
|
|
# TODO(eseidel): This should be shared with tools/android_stack_parser/stack
|
|
# TODO(eseidel): This could be replaced by using build-ids on Android
|
|
# TODO(eseidel): mojo_shell should write out a cache mapping file.
|
|
def main():
|
|
logging.basicConfig(level=logging.INFO)
|
|
parser = argparse.ArgumentParser(
|
|
description='Watches mojo_shell logcat output and builds a directory '
|
|
'of symlinks to symboled binaries for seen cache names.')
|
|
parser.add_argument('links_dir', type=str)
|
|
parser.add_argument('symbols_dir', type=str)
|
|
parser.add_argument('base_url', type=str)
|
|
args = parser.parse_args()
|
|
|
|
regex = re.compile('Caching mojo app (?P<url>\S+) at (?P<path>\S+)')
|
|
|
|
if not os.path.isdir(args.links_dir):
|
|
logging.fatal('links_dir: %s is not a directory' % args.links_dir)
|
|
sys.exit(1)
|
|
|
|
for line in sys.stdin:
|
|
result = regex.search(line)
|
|
if not result:
|
|
continue
|
|
|
|
url = result.group('url')
|
|
if not url.startswith(args.base_url):
|
|
logging.debug('%s does not match base %s' % (url, args.base_url))
|
|
continue
|
|
full_name = os.path.basename(url)
|
|
name, ext = os.path.splitext(full_name)
|
|
if ext != '.mojo':
|
|
logging.debug('%s is not a .mojo library' % url)
|
|
continue
|
|
|
|
symboled_name = 'lib%s_library.so' % name
|
|
cache_link_path = os.path.join(args.links_dir,
|
|
os.path.basename(result.group('path')))
|
|
symboled_path = os.path.realpath(
|
|
os.path.join(args.symbols_dir, symboled_name))
|
|
if not os.path.isfile(symboled_path):
|
|
logging.warn('symboled path %s does not exist' % symboled_path)
|
|
continue
|
|
|
|
print "%s -> %s" % (cache_link_path, symboled_path)
|
|
|
|
if os.path.lexists(cache_link_path):
|
|
logging.debug('link already exists %s, replacing' % symboled_path)
|
|
os.unlink(cache_link_path)
|
|
|
|
os.symlink(symboled_path, cache_link_path)
|
|
|
|
if __name__ == '__main__':
|
|
main()
|