2023-06-30 20:36:46 +02:00

70 lines
1.7 KiB
Markdown

# GDB-QEMU
`gdb-qemu` is a launcher for running `qemu-user` within `gdb`.
# Test
```
rustup target add powerpc-unknown-linux-gnu
$ cargo make gdb
```
# Example
```
gdb-multiarch \
-ex "set architecture powerpc:MPC8XX" \
-ex "set pagination off" \
-ex "set confirm off" \
-ex "file demo" \
-ex "target remote | gdb-qemu -p 1234 qemu-ppc -- -L /usr/powerpc-linux-gnu -g 1234 demo
```
# About
`qemu-gdb` does the following:
* Creates two pipes for the target program to send its `stdout`, `stderr`.
* Forks a child process and sets the `stdout` and `stderr` using `dup2`.
* Exec's the target program (passing the provided arguments).
* Connects to the specified TCP debug port on the target program.
* Forwards data from `gdb-qemu`'s `stdin` and `stdout` to the TCP port.
* Forwards data from the target program's `stdout` and `stderr` to `gdb-qemu`s `stderr`.
* Optionally logs to the specified log file.
* Optionally logs trace information of the data transferred by the message pumps.
# Usage
```
Tool launching qemu-user for debugging
Usage: gdb-qemu [OPTIONS] --port <PORT> <PROGRAM> [-- <ARGS>...]
Arguments:
<PROGRAM>
Name of the qemu-user binary to launch
[ARGS]...
Arguments passed to the target
Options:
-p, --port <PORT>
Port
-t, --timeout <TIMEOUT>
Timeout Ms
[default: 2000]
-l, --log-file <LOG_FILE>
Log file (Requires --log-level)
[default: gdb_qemu.log]
-L, --log-level <LOG_LEVEL>
Log level
[default: off]
[possible values: off, error, warn, info, debug, trace]
-h, --help
Print help (see a summary with '-h')
-V, --version
Print version
```