#!/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" || 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