| #!/bin/bash |
| |
| # Copyright (c) 2011 The Chromium OS Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| # Script to generate stackdumps from BVT failures. |
| |
| # This can only run inside the chroot since we need minidump_stackwalk. |
| . "$(dirname $0)/common.sh" || { echo "Unable to load common.sh"; exit 1; } |
| assert_inside_chroot "$@" |
| |
| usage() { |
| echo "Usage: $0 url_or_path_to_debug_tgz url_to_bvt_test_results" |
| } |
| |
| if [ -z "$1" ] ; then |
| usage |
| die_notrace "The URL or path to symbols tarball (debug.tgz) is required" |
| fi |
| |
| if [ -z "$2" ] ; then |
| usage |
| die_notrace "The URL to BVT test results is required" |
| fi |
| |
| # Die on any errors. |
| switch_to_strict_mode |
| |
| BREAKPAD_DIR="debug/breakpad" |
| STACKS_GENERATED="" |
| OUTPUT_DIR="$(mktemp -d)" |
| |
| extract_tarball() { |
| info "Extracting breakpad symbols from $1..." |
| tar zxf "$1" -C "${OUTPUT_DIR}" "${BREAKPAD_DIR}" |
| } |
| |
| generate_stacktrace() { |
| echo "$1.txt" |
| minidump_stackwalk "$1" "${OUTPUT_DIR}/${BREAKPAD_DIR}" \ |
| >"$1.txt" 2>/dev/null |
| } |
| |
| find_and_generate_stacktraces() { |
| find "${OUTPUT_DIR}" -name "*.dmp" | |
| while read filename ; do |
| generate_stacktrace "${filename}" |
| done |
| } |
| |
| cleanup() { |
| if [ -n "${OUTPUT_DIR}" -a -z "${STACKS_GENERATED}" ] ; then |
| rm -rf "${OUTPUT_DIR}" |
| fi |
| } |
| |
| trap cleanup INT TERM EXIT |
| |
| info "Downloading minidumps from $2..." |
| wget -q -nv -r -l 10 -np -A "*.dmp" -P "${OUTPUT_DIR}" $2 |
| if [[ -z "$(find "${OUTPUT_DIR}" -name "*.dmp")" ]] ; then |
| die "No minidumps found" |
| fi |
| |
| if [[ -f "$1" ]] ; then |
| extract_tarball "$1" |
| else |
| info "Downloading symbols tarball from $1..." |
| wget -P "${OUTPUT_DIR}" "$1" |
| TARBALL="${OUTPUT_DIR}/$(basename $1)" |
| extract_tarball "$TARBALL" |
| rm -f "$TARBALL" |
| fi |
| |
| info "Generating stack traces..." |
| STACKS_GENERATED=$(find_and_generate_stacktraces) |
| echo $STACKS_GENERATED |