| #!/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 "$@" |
| |
| function usage() { |
| echo "Usage: $0 url_to_debug_tgz url_to_bvt_test_results" |
| } |
| |
| if [ -z "$1" ] ; then |
| usage |
| die "The URL to symbols tarball (debug.tgz) is required" |
| fi |
| |
| if [ -z "$2" ] ; then |
| usage |
| die "The URL to BVT test results is required" |
| fi |
| |
| # Die on any errors. |
| set -e |
| |
| BREAKPAD_DIR="debug/breakpad" |
| DEBUG_TGZ=$(basename $1) |
| STACKS_GENERATED="" |
| OUTPUT_DIR=$(mktemp -d) |
| |
| function generate_stacktrace() { |
| echo "$1.txt" |
| minidump_stackwalk $1 ${OUTPUT_DIR}/${BREAKPAD_DIR} > $1.txt 2> /dev/null |
| } |
| |
| function find_and_generate_stacktraces() { |
| find ${OUTPUT_DIR} -name *.dmp | |
| while read filename ; do |
| generate_stacktrace ${filename} |
| done |
| } |
| |
| function cleanup() { |
| if [ -n "${OUTPUT_DIR}" -a -z "${STACKS_GENERATED}" ] ; then |
| rm -rf ${OUTPUT_DIR} |
| fi |
| } |
| |
| trap cleanup INT TERM EXIT |
| |
| info "Downloading symbols tarball..." |
| wget -P ${OUTPUT_DIR} $1 |
| info "Extracting breakpad symbols..." |
| tar zxf ${OUTPUT_DIR}/${DEBUG_TGZ} -C ${OUTPUT_DIR} ${BREAKPAD_DIR} |
| rm ${OUTPUT_DIR}/${DEBUG_TGZ} |
| info "Downloading minidumps from test results..." |
| wget -q -nv -r -np -A "*.dmp" -P ${OUTPUT_DIR} $2 |
| info "Generating stack traces..." |
| STACKS_GENERATED=$(find_and_generate_stacktraces) |
| echo $STACKS_GENERATED |
| if [ -z "${STACKS_GENERATED}" ] ; then |
| warn "No minidumps found" |
| fi |