Files
android_development/scripts/stack
David Srbecky 80547ae39d Remove parameters from symbolized stack traces.
The expanded parameters take a lot horizontal space
and almost always push the file:line of the screen,
or text-wrap generating multiple lines per frame.

This CL tries to make the output less cluttered by
removing parameters from the unmangled method names.

It is possible to add the parameters back using
the --verbose command line argument.

Test: Add unit tests, investigate crashes from logcat
Change-Id: I42d1e26dbc2fa9db8b7bd95ce449cb2bd93f93f8
2021-12-23 14:09:11 +00:00

73 lines
2.4 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:
symbol.ARCH = args.arch
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")
f = sys.stdin
else:
print("Searching for native crashes in %s" % args.file)
f = open(args.file, "r")
lines = f.readlines()
f.close()
stack_core.ConvertTrace(lines)
if __name__ == "__main__":
main()
# vi: ts=2 sw=2