| #!/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" | |
| # 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\"" | |
| # Finally we execute gdbgui. | |
| PYTHONPATH="$PYTHONPATH:$GDB_PYTHON_MODULE_DIRECTORY" \ | |
| exec ${RUST_GDBGUI} \ | |
| --gdb ${RUST_GDB} \ | |
| --gdb-args "${GDB_ARGS}" \ | |
| "${@}" | |