Replaced with ARCH_IS_32BIT since that's the only thing truly necessary to work. This also makes the register regex much more lenient, but it appears to be strict enough that it doesn't seem to capture arbitrary lines when run through logcat. Removed the StripPC function and verified that an arm crash that ends in 1 still works. Removed the architecture.py script, it is old and I don't see anyone using it. Modify the reading of the lines to ignore any errors in the input. Test: All unit tests pass. Test: Symbolized arm and arm64 tombstones Test: Symbolized x86 and x86_64 tombstones Test: Ran through a logcat and verified it caught the bug but Test: didn't print any extra information. Change-Id: I6a65ecaad68da1d56864db32ff434512e4df0d89
77 lines
2.6 KiB
Python
Executable File
77 lines
2.6 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
#
|
|
# Copyright (C) 2013 The Android Open Source Project
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
"""stack symbolizes native crash dumps."""
|
|
|
|
import argparse
|
|
import atexit
|
|
import glob
|
|
import sys
|
|
import tempfile
|
|
import zipfile
|
|
|
|
import stack_core
|
|
import symbol
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(description='Parse and symbolize crashes')
|
|
parser.add_argument('--arch', help='the target architecture')
|
|
group = parser.add_mutually_exclusive_group()
|
|
group.add_argument('--symbols-dir', '--syms', '--symdir', help='the symbols directory')
|
|
group.add_argument('--symbols-zip', help='the symbols.zip file from a build')
|
|
parser.add_argument('-v', '--verbose', action='store_true', help="include function parameters")
|
|
parser.add_argument('file',
|
|
metavar='FILE',
|
|
default='-',
|
|
nargs='?', # Required for default.
|
|
help='should contain a stack trace in it somewhere the '
|
|
'tool will find that and re-print it with source '
|
|
'files and line numbers. If you don\'t pass FILE, '
|
|
'or if file is -, it reads from stdin.')
|
|
|
|
args = parser.parse_args()
|
|
if args.arch:
|
|
if args.arch == "arm" or args.arch == "x86":
|
|
symbol.ARCH_IS_32BIT = True
|
|
else:
|
|
symbol.ARCH_IS_32BIT = False
|
|
if args.symbols_dir:
|
|
symbol.SYMBOLS_DIR = args.symbols_dir
|
|
if args.symbols_zip:
|
|
tmp = tempfile.TemporaryDirectory()
|
|
atexit.register(tmp.cleanup)
|
|
with zipfile.ZipFile(args.symbols_zip) as zf:
|
|
zf.extractall(tmp.name)
|
|
symbol.SYMBOLS_DIR = glob.glob("%s/out/target/product/*/symbols" % tmp.name)[0]
|
|
symbol.VERBOSE = args.verbose
|
|
if args.file == '-':
|
|
print("Reading native crash info from stdin")
|
|
sys.stdin.reconfigure(errors='ignore')
|
|
f = sys.stdin
|
|
else:
|
|
print("Searching for native crashes in %s" % args.file)
|
|
f = open(args.file, "r", errors='ignore')
|
|
|
|
lines = f.readlines()
|
|
f.close()
|
|
|
|
stack_core.ConvertTrace(lines)
|
|
|
|
if __name__ == "__main__":
|
|
main()
|
|
|
|
# vi: ts=2 sw=2
|