in commit 8dd0ec6, the `GDB_ARGS` variable was split across 3 lines. However, extra quotes were added to each line, such that the shell interprets the 3 lines as space separated strings, and tries to execute the latter two lines. This commit simply removes the extra quotes.
67 lines
2.1 KiB
Bash
Executable file
67 lines
2.1 KiB
Bash
Executable file
#!/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}" \
|
|
"${@}"
|
|
|