Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/LibreOffice/solenv/bin/   (Office von Apache Version 25.8.3.2©)  Datei vom 5.10.2025 mit Größe 4 kB image not shown  

Quelle  gdb-core-bt.sh   Sprache: Shell

 
#!/bin/sh
#
#
# This file is part of the LibreOffice project.
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
#

EXECUTABLE=${1}
COREDIR=${2}
EXITCODE=${3}

if command -v gdb >/dev/null
then
    found=
    for COREFILE in "$COREDIR"/core*
    do
        if [ -f "$COREFILE" ]
        then
            guess=$(file "$COREFILE")
            guess=${guess#* execfn: \'}
            guess=${guess%%\'*}
            if [ ! -x "$guess" ]; then guess=$EXECUTABLE; fi
            printf '\nIt looks like %s generated %s\nBacktraces:\n' \
                "$guess" "$COREFILE"
            GDBCOMMANDFILE=$(mktemp)
            printf "info registers\nthread apply all backtrace full\n" \
                >"$GDBCOMMANDFILE"
            PYTHONWARNINGS=default gdb -iex "add-auto-load-safe-path ${INSTDIR?}" \
                -x "$GDBCOMMANDFILE" --batch "$guess" "$COREFILE" && found=x
            rm "$GDBCOMMANDFILE"
            echo
        fi
    done
    if test -n "$WITH_COREDUMPCTL"then
        systemd_version=$(systemctl --version | head -1 | awk '{ print $2 }')
        # We need systemd version >= 248 in order for coredumpctl to support --json and --debugger-arguments
        if [ $systemd_version -ge 248 ]
        then
            # Unfortunately `coredumpctl debug` only operates on the most recent core dump matching any
            # given criteria, not on all core dumps matching those criteria; so get the PIDs of all core
            # dumps matching the given COREDUMP_USER_UNIT (and for which a core dump is still present)
            # first, and then iterate over them (though this introduces possibilities for some,
            # hopefully unlikely and mostly harmless, races, like when core dumps disappear in between,
            # or multiple matching core dumps have identical PIDs):
            for i in $($COREDUMPCTL --json=short list COREDUMP_USER_UNIT="$LIBO_TEST_UNIT".scope | \
                           $JQ -r 'map(select(.corefile=="present"))|map(.pid)|join(" ")')
            do
                GDBCOMMANDFILE=$(mktemp)
                printf 'info registers\nthread apply all backtrace full\n' >"$GDBCOMMANDFILE"
                PYTHONWARNINGS=default $COREDUMPCTL debug \
                    COREDUMP_USER_UNIT="$LIBO_TEST_UNIT".scope COREDUMP_PID="$i" \
                    --debugger-arguments="-iex 'add-auto-load-safe-path ${INSTDIR?}' \
                        -x '$GDBCOMMANDFILE' --batch"
                rm "$GDBCOMMANDFILE"
                found=x
            done
        else
            # NoelGrandin - so I can confirm 3 things:
            # (1) virtually none of the jenkins boxes have coredumpctl new enough for the --json option.
            # (2) virtually none of the jenkins boxes have coredumpctl new enough for the --debugger-arguments option
            # (3) Around 50% of the time, coredumpctl will say it has no core files available,
            #     even though we have just dumped core.
            # So just do our best, and hope that we are analysing the right core file.
            #
            sleep 10s
            $COREDUMPCTL -1 list
            # copy core file out of systemd
            TEMPCOREFILE=$(mktemp)
            $COREDUMPCTL -1 -o $TEMPCOREFILE dump
            # analyse core file with gdb
            guess=$(file "$TEMPCOREFILE")
            guess=${guess#* execfn: \'}
            guess=${guess%%\'*}
            if [ ! -x "$guess" ]; then guess=$EXECUTABLE; fi
            printf '\nOne of our tests dumped core, and we are generating a backtrace from the more recent core we can extract from coredumpctl.'
            printf '\n'
            printf '\n>>>>>This might not be the right one.<<<<'
            printf '\n'
            printf '\nIt looks like %s generated %s\nBacktraces:\n' "$guess" "$TEMPCOREFILE"
            GDBCOMMANDFILE=$(mktemp)
            printf 'info registers\nthread apply all backtrace full\n' >"$GDBCOMMANDFILE"
            PYTHONWARNINGS=default gdb -iex "add-auto-load-safe-path ${INSTDIR?}" \
                -x "$GDBCOMMANDFILE" --batch "$guess" "$TEMPCOREFILE"
            rm "$GDBCOMMANDFILE"
            rm "$TEMPCOREFILE"
            found=x
        fi
    fi
    if [ -z "$found" -a "$EXITCODE" -ge 128 ]; then
        echo
        echo "No core file identified in directory ${COREDIR}"
        echo "To show backtraces for crashes during test execution,"
        echo "enable core files with:"
        echo
        echo " ulimit -c unlimited"
        echo
        exit 1
    fi
else
    echo "You need gdb in your path to show backtraces"
    exit 1
fi

Messung V0.5
C=90 H=96 G=93

¤ Dauer der Verarbeitung: 0.3 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.