#!/bin/sh # Exit if anything fails set -e if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ] || [ "$1" = "--help" ]; then echo " rust-gdbgui =========== gdbgui - https://gdbgui.com - is a graphical front-end to GDB that runs in a browser. This script invokes gdbgui with the Rust pretty printers loaded. Simple usage : rust-gdbgui target/debug/myprog With arguments: rust-gdbgui 'target/debug/myprog arg1 arg2...' (note the quotes) Hints ===== gdbgui won't be able to find the rust 'main' method automatically, so in its options make sure to disable the 'Add breakpoint to main after loading executable' setting to avoid a 'File not found: main' warning on startup. Instead, type 'main' into gdbgui's file browser and you should get auto-completion on the filename. Just pick 'main.rs', add a breakpoint by clicking in the line number gutter, and type 'r' or hit the Restart icon to start your program running. " exit 0 fi # Prefer rustc in the same directory as this script DIR="$(dirname "$0")" if [ -x "$DIR/rustc" ]; then RUSTC="$DIR/rustc" else RUSTC="rustc" fi # Find out where the pretty printer Python module is RUSTC_SYSROOT="$("$RUSTC" --print=sysroot)" GDB_PYTHON_MODULE_DIRECTORY="$RUSTC_SYSROOT/lib/rustlib/etc" # Get the commit hash for path remapping RUSTC_COMMIT_HASH="$("$RUSTC" -vV | sed -n 's/commit-hash: \([a-zA-Z0-9_]*\)/\1/p')" # Set the environment variable `RUST_GDB` to overwrite the call to a # different/specific command (defaults to `gdb`). RUST_GDB="${RUST_GDB:-gdb}" # Set the environment variable `RUST_GDBGUI` to overwrite the call to a # different/specific command (defaults to `gdbgui`). RUST_GDBGUI="${RUST_GDBGUI:-gdbgui}" # These arguments get passed through to GDB and make it load the # Rust pretty printers. GDB_ARGS="--directory=\"$GDB_PYTHON_MODULE_DIRECTORY\" \ -iex \"add-auto-load-safe-path $GDB_PYTHON_MODULE_DIRECTORY\" \ -iex \"set substitute-path /rustc/$RUSTC_COMMIT_HASH $RUSTC_SYSROOT/lib/rustlib/src/rust\"" # Finally we execute gdbgui. PYTHONPATH="$PYTHONPATH:$GDB_PYTHON_MODULE_DIRECTORY" \ exec ${RUST_GDBGUI} \ --gdb-cmd "${RUST_GDB} ${GDB_ARGS}" \ "${@}"