Files
secondo/bin/SecondoTTYBDB
2026-01-23 17:03:45 +08:00

90 lines
2.3 KiB
Plaintext

#
#
##############################
executable=$(which SecondoBDB)
VALGRIND_STD_OPTIONS=" --num-callers=25 --suppressions=vgs.txt --error-limit=no --smc-check=all --track-origins=yes"
if [ "$1" == "--valgrind" ]; then
shift
runner="valgrind $VALGRIND_STD_OPTIONS $executable"
else
if [ "$1" == "--valgrindlc" ]; then
shift
runner="valgrind $VALGRIND_STD_OPTIONS --leak-check=full $executable"
else
if [ "$1" == "--profile" ]; then
shift
runner="valgrind --tool=callgrind --dump-instr=yes --trace-jump=yes $executable"
else
runner=$executable
fi
fi
fi
# Redirecting stack trace output if mktemp exists
if hash mktemp 2> /dev/null; then
stacktrace_output=$(mktemp)
echo "Redirecting stack trace to: $stacktrace_output"
export SEGFAULT_OUTPUT_NAME=$stacktrace_output
fi
# Run SECONDO
$runner $*
# stacktrace_output was set, check content of the file
if [ -n "$stacktrace_output" ] ; then
# Print stack trace, if secondo has crashed
if [ -s "$stacktrace_output" ] ; then
echo -e "\n"
echo "========"
echo "SECONDO has crashed, printing stack trace...."
echo "========"
echo -e "\n"
cat $stacktrace_output
# Convert addresses to lines if addr2line is available
if hash addr2line 2> /dev/null ; then
lines=""
echo -e "\n"
echo "========"
echo " Trying to decode the stacktrace..."
echo "========"
echo -e "\n"
# Get relocation if available
if [ $(cat $stacktrace_output | grep "Binary relocation:" | wc -l) -gt 0 ]; then
binary_relocation=$(cat $stacktrace_output | grep "Binary relocation:" | cut -d ":" -f 2)
else
binary_relocation="0x0"
fi
# Extract and collect addresses
stacktrace=$(cat $stacktrace_output | grep "0x")
for line in $stacktrace; do
if [ $(echo $line | grep "\[" | wc -l) -eq 0 ]; then
continue
fi
addr=$(echo $line | cut -d "[" -f 2 | sed s/]//g)
printf -v raddr "0x%X" $(($addr - $binary_relocation))
lines="$lines $raddr"
done
addr2line --demangle=auto -p -fs -e $runner $lines
fi
echo "========"
fi
rm $stacktrace_output
fi