Index: build/android/symbolize.py |
diff --git a/build/android/symbolize.py b/build/android/symbolize.py |
deleted file mode 100755 |
index d5f6d7ca74bd88d70c78d38ccc083bc0780f014f..0000000000000000000000000000000000000000 |
--- a/build/android/symbolize.py |
+++ /dev/null |
@@ -1,88 +0,0 @@ |
-#!/usr/bin/env python |
-# |
-# Copyright 2013 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. |
- |
-"""Symbolizes stack traces generated by Chromium for Android. |
- |
-Sample usage: |
- adb logcat chromium:V | symbolize.py |
-""" |
- |
-import re |
-import sys |
- |
-from pylib.constants import host_paths |
- |
-# Uses symbol.py from third_party/android_platform, not python's. |
-with host_paths.SysPath( |
- host_paths.ANDROID_PLATFORM_DEVELOPMENT_SCRIPTS_PATH, |
- position=0): |
- import symbol |
- |
-# Sample output from base/debug/stack_trace_android.cc |
-#00 0x693cd34f /path/to/some/libfoo.so+0x0007434f |
-TRACE_LINE = re.compile(r'(?P<frame>\#[0-9]+ 0x[0-9a-f]{8,8}) ' |
- r'(?P<lib>[^+]+)\+0x(?P<addr>[0-9a-f]{8,8})') |
- |
-class Symbolizer(object): |
- def __init__(self, output): |
- self._output = output |
- |
- def write(self, data): |
- while True: |
- match = re.search(TRACE_LINE, data) |
- if not match: |
- self._output.write(data) |
- break |
- |
- frame = match.group('frame') |
- lib = match.group('lib') |
- addr = match.group('addr') |
- |
- # TODO(scherkus): Doing a single lookup per line is pretty slow, |
- # especially with larger libraries. Consider caching strategies such as: |
- # 1) Have Python load the libraries and do symbol lookups instead of |
- # calling out to addr2line each time. |
- # 2) Have Python keep multiple addr2line instances open as subprocesses, |
- # piping addresses and reading back symbols as we find them |
- # 3) Read ahead the entire stack trace until we find no more, then batch |
- # the symbol lookups. |
- # |
- # TODO(scherkus): These results are memoized, which could result in |
- # incorrect lookups when running this script on long-lived instances |
- # (e.g., adb logcat) when doing incremental development. Consider clearing |
- # the cache when modification timestamp of libraries change. |
- # pylint: disable=no-member |
- sym = symbol.SymbolInformation(lib, addr, False)[0][0] |
- |
- if not sym: |
- post = match.end('addr') |
- self._output.write(data[:post]) |
- data = data[post:] |
- continue |
- |
- pre = match.start('frame') |
- post = match.end('addr') |
- |
- self._output.write(data[:pre]) |
- self._output.write(frame) |
- self._output.write(' ') |
- self._output.write(sym) |
- |
- data = data[post:] |
- |
- def flush(self): |
- self._output.flush() |
- |
- |
-def main(): |
- symbolizer = Symbolizer(sys.stdout) |
- for line in sys.stdin: |
- symbolizer.write(line) |
- symbolizer.flush() |
- |
- |
-if __name__ == '__main__': |
- main() |