diff options
author | Daniel Gottlieb <daniel.gottlieb@mongodb.com> | 2021-02-08 14:55:20 -0500 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2021-02-09 04:43:08 +0000 |
commit | 358b588d7c1f20b5e1099a1eaea9a0adf644935a (patch) | |
tree | fc7ee72eaa524af10167612dad8d0b4b7d642a8e /buildscripts | |
parent | 6c57358e4156ae4291f24fce1cf22ffc54f4dbb0 (diff) | |
download | mongo-358b588d7c1f20b5e1099a1eaea9a0adf644935a.tar.gz |
SERVER-54138: Add setup_spawnhost_coredump to 4.2.
Diffstat (limited to 'buildscripts')
-rw-r--r-- | buildscripts/setup_spawnhost_coredump | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/buildscripts/setup_spawnhost_coredump b/buildscripts/setup_spawnhost_coredump new file mode 100644 index 00000000000..73340f3e936 --- /dev/null +++ b/buildscripts/setup_spawnhost_coredump @@ -0,0 +1,77 @@ +#!/bin/bash + +cat >> ~/.profile <<EOF +# Coredumps generated by a toolchain built mongodb can be problematic when examined with the system +# gdb. +export PATH=/opt/mongodbtoolchain/gdb/bin:$PATH +# As per below, put the user into the appropriate directory. This is where gdb is expected to be +# invoked from. +cd debug +echo "Debuggable binaries:" +ls -l mongo* | grep -v debug$ +for item in "mongo" "mongod" "mongos"; do + echo "\${item} core dumps:" + ls -l dump_\${item}.* +done + +echo "Core dumps from unknown processes (crashed processes typically found here):" +ls -l dump_* | grep -v mongo + +echo +echo "To examine a core dump, type 'gdb ./<binary> ./<core file>'" +EOF + +export PATH=/opt/mongodbtoolchain/gdb/bin:$PATH +echo 'if [ -f ~/.profile ]; then + . ~/.profile +fi' >> .bash_profile + +# Make a directory on the larger EBS volume. Soft-link it under the home directory. The smaller home +# volume can have trouble particularly with coredumps from sharded timeouts. +mkdir /data/debug +ln -s /data/debug . +cd debug + +# As the name suggests, pretty printers. Primarily for boost::optional<T> +git clone git@github.com:ruediger/Boost-Pretty-Printer.git & + +# 4.4 artifacts are statically linked with hygienic install directories. +# +# Discover and unarchive necessary files and source code. This will put mongo binaries and their +# partner .debug files in the same top-level (`debug`) directory. Shared library files and their +# debug symbols will be dumped into a `debug/lib` directory for tidiness. The mongo +# `<reporoot>/src/` directory is soft linked as `debug/src`. The .gdbinit file assumes gdb is being +# run from the `debug` directory. +BIN_ARCHIVE=`ls /data/mci/artifacts-*compile/mongo-mongodb*.tgz` +tar --wildcards --strip-components=2 -xzf $BIN_ARCHIVE '*/bin/mongod' '*/bin/mongos' '*/bin/mongo' '*/bin/mongobridge' & +DBG_ARCHIVE=`ls /data/mci/artifacts-*compile/debugsymbols-*.tgz` +tar --wildcards --strip-components=1 -xzf $DBG_ARCHIVE '*/mongod.debug' '*/mongos.debug' '*/mongo.debug' '*/mongobridge.debug' & +SRC_DIR=`find /data/mci/ -maxdepth 1 | grep source` +ln -s $SRC_DIR/.gdbinit . +ln -s $SRC_DIR/src src +ln -s $SRC_DIR/buildscripts buildscripts + +# Install pymongo to get the bson library for pretty-printers. +/opt/mongodbtoolchain/v3/bin/pip3 install -r $SRC_DIR/etc/pip/dev-requirements.txt & + +COREDUMP_ARCHIVE=`ls /data/mci/artifacts-*/mongo-coredumps-*.tgz` +tar -xzf $COREDUMP_ARCHIVE & +echo "Waiting for background processes to complete." +wait + +cat >> ~/.gdbinit <<EOF +set auto-load safe-path / +set pagination off +set print object on +set print static-members off +set print pretty on + +python +import sys +sys.path.insert(0, './Boost-Pretty-Printer') +import boost +boost.register_printers(boost_version=(1,70,0)) +end +EOF + +echo "dir $HOME/debug" >> ~/.gdbinit |