xref: /aosp_15_r20/prebuilts/rust/linux-x86/1.80.1/bin/rust-gdbgui (revision b40554a23088fb75aa6945dfe8e65169c8484da3)
1*b40554a2SAndroid Build Coastguard Worker#!/bin/sh
2*b40554a2SAndroid Build Coastguard Worker
3*b40554a2SAndroid Build Coastguard Worker# Exit if anything fails
4*b40554a2SAndroid Build Coastguard Workerset -e
5*b40554a2SAndroid Build Coastguard Worker
6*b40554a2SAndroid Build Coastguard Workerif [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ] || [ "$1" = "--help" ]; then
7*b40554a2SAndroid Build Coastguard Worker    echo "
8*b40554a2SAndroid Build Coastguard Workerrust-gdbgui
9*b40554a2SAndroid Build Coastguard Worker===========
10*b40554a2SAndroid Build Coastguard Workergdbgui - https://gdbgui.com - is a graphical front-end to GDB
11*b40554a2SAndroid Build Coastguard Workerthat runs in a browser. This script invokes gdbgui with the Rust
12*b40554a2SAndroid Build Coastguard Workerpretty printers loaded.
13*b40554a2SAndroid Build Coastguard Worker
14*b40554a2SAndroid Build Coastguard WorkerSimple usage  : rust-gdbgui target/debug/myprog
15*b40554a2SAndroid Build Coastguard WorkerWith arguments: rust-gdbgui 'target/debug/myprog arg1 arg2...'
16*b40554a2SAndroid Build Coastguard Worker  (note the quotes)
17*b40554a2SAndroid Build Coastguard Worker
18*b40554a2SAndroid Build Coastguard Worker
19*b40554a2SAndroid Build Coastguard WorkerHints
20*b40554a2SAndroid Build Coastguard Worker=====
21*b40554a2SAndroid Build Coastguard Workergdbgui won't be able to find the rust 'main' method automatically, so
22*b40554a2SAndroid Build Coastguard Workerin its options make sure to disable the 'Add breakpoint to main after
23*b40554a2SAndroid Build Coastguard Workerloading executable' setting to avoid a 'File not found: main' warning
24*b40554a2SAndroid Build Coastguard Workeron startup.
25*b40554a2SAndroid Build Coastguard Worker
26*b40554a2SAndroid Build Coastguard WorkerInstead, type 'main' into gdbgui's file browser and you should get
27*b40554a2SAndroid Build Coastguard Workerauto-completion on the filename. Just pick 'main.rs', add a breakpoint
28*b40554a2SAndroid Build Coastguard Workerby clicking in the line number gutter, and type 'r' or hit the Restart
29*b40554a2SAndroid Build Coastguard Workericon to start your program running.
30*b40554a2SAndroid Build Coastguard Worker"
31*b40554a2SAndroid Build Coastguard Worker    exit 0
32*b40554a2SAndroid Build Coastguard Workerfi
33*b40554a2SAndroid Build Coastguard Worker
34*b40554a2SAndroid Build Coastguard Worker# Prefer rustc in the same directory as this script
35*b40554a2SAndroid Build Coastguard WorkerDIR="$(dirname "$0")"
36*b40554a2SAndroid Build Coastguard Workerif [ -x "$DIR/rustc" ]; then
37*b40554a2SAndroid Build Coastguard Worker  RUSTC="$DIR/rustc"
38*b40554a2SAndroid Build Coastguard Workerelse
39*b40554a2SAndroid Build Coastguard Worker  RUSTC="rustc"
40*b40554a2SAndroid Build Coastguard Workerfi
41*b40554a2SAndroid Build Coastguard Worker
42*b40554a2SAndroid Build Coastguard Worker# Find out where the pretty printer Python module is
43*b40554a2SAndroid Build Coastguard WorkerRUSTC_SYSROOT="$("$RUSTC" --print=sysroot)"
44*b40554a2SAndroid Build Coastguard WorkerGDB_PYTHON_MODULE_DIRECTORY="$RUSTC_SYSROOT/lib/rustlib/etc"
45*b40554a2SAndroid Build Coastguard Worker# Get the commit hash for path remapping
46*b40554a2SAndroid Build Coastguard WorkerRUSTC_COMMIT_HASH="$("$RUSTC" -vV | sed -n 's/commit-hash: \([a-zA-Z0-9_]*\)/\1/p')"
47*b40554a2SAndroid Build Coastguard Worker
48*b40554a2SAndroid Build Coastguard Worker# Set the environment variable `RUST_GDB` to overwrite the call to a
49*b40554a2SAndroid Build Coastguard Worker# different/specific command (defaults to `gdb`).
50*b40554a2SAndroid Build Coastguard WorkerRUST_GDB="${RUST_GDB:-gdb}"
51*b40554a2SAndroid Build Coastguard Worker
52*b40554a2SAndroid Build Coastguard Worker# Set the environment variable `RUST_GDBGUI` to overwrite the call to a
53*b40554a2SAndroid Build Coastguard Worker# different/specific command (defaults to `gdbgui`).
54*b40554a2SAndroid Build Coastguard WorkerRUST_GDBGUI="${RUST_GDBGUI:-gdbgui}"
55*b40554a2SAndroid Build Coastguard Worker
56*b40554a2SAndroid Build Coastguard Worker# These arguments get passed through to GDB and make it load the
57*b40554a2SAndroid Build Coastguard Worker# Rust pretty printers.
58*b40554a2SAndroid Build Coastguard WorkerGDB_ARGS="--directory=\"$GDB_PYTHON_MODULE_DIRECTORY\" \
59*b40554a2SAndroid Build Coastguard Worker   -iex \"add-auto-load-safe-path $GDB_PYTHON_MODULE_DIRECTORY\" \
60*b40554a2SAndroid Build Coastguard Worker   -iex \"set substitute-path /rustc/$RUSTC_COMMIT_HASH $RUSTC_SYSROOT/lib/rustlib/src/rust\""
61*b40554a2SAndroid Build Coastguard Worker
62*b40554a2SAndroid Build Coastguard Worker# Finally we execute gdbgui.
63*b40554a2SAndroid Build Coastguard WorkerPYTHONPATH="$PYTHONPATH:$GDB_PYTHON_MODULE_DIRECTORY" \
64*b40554a2SAndroid Build Coastguard Worker  exec ${RUST_GDBGUI} \
65*b40554a2SAndroid Build Coastguard Worker  --gdb-cmd "${RUST_GDB} ${GDB_ARGS}" \
66*b40554a2SAndroid Build Coastguard Worker  "${@}"
67*b40554a2SAndroid Build Coastguard Worker
68