Как передать аргументы и перенаправить stdin из файла в программу, запущенную в gdb?

Обычно я запускаю программу как:

./a.out arg1 arg2 <file

Я хотел бы отладить его с помощью gdb.

Я знаю функциональность set args, но это работает только из приглашения gdb.

Ответ 1

Передайте аргументы команде run из gdb.

$ gdb ./a.out
(gdb) r < t
Starting program: /dir/a.out < t

Ответ 2

Вы можете сделать это:

gdb --args path/to/executable -every -arg you can=think < of

Магический бит --args.

Просто введите run в командной консоли gdb, чтобы начать отладку.

Ответ 3

Если вы хотите иметь голую команду run в gdb для выполнения вашей программы с перенаправлениями и аргументами, вы можете использовать set args:

% gdb ./a.out
(gdb) set args arg1 arg2 <file
(gdb) run

Мне не удалось добиться такого же поведения с параметром --args, gdb яростно избегает перенаправления, т.е.

% gdb --args echo 1 2 "<file"
(gdb) show args
Argument list to give program being debugged when it is started is "1 2 \<file".
(gdb) run
...
1 2 <file
...

Этот фактически перенаправляет ввод самого gdb, а не то, что мы действительно хотим здесь

% gdb --args echo 1 2 <file
zsh: no such file or directory: file

Ответ 4

Запустите GDB в своем проекте.

  • Перейдите в каталог проекта, где вы уже скомпилировали исполняемый файл проекта. Выполните команду gdb и имя исполняемого файла, как показано ниже:

    gdb projectExecutablename

Это запускает gdb, печатает следующее: GNU gdb (Ubuntu 7.11.1-0ubuntu1 ~ 16.04) 7.11.1 Copyright (C) 2016 Free Software Foundation, Inc. ................................................. Введите "apropos word" для поиска команд, связанных с "словом"... Чтение символов из projectExecutablename... сделано. (GDB)

  1. Прежде чем запускать свою программу, вы хотите настроить свои контрольные точки. Команда break позволяет это сделать. Чтобы установить точку останова в начале функции с именем main:

    (gdb) b main

  2. Как только у вас появится приглашение (gdb), команда запуска запустит исполняемый файл. Если для отлаживаемой программы требуются любые аргументы командной строки, вы указываете их в команде запуска. Если вы хотите запустить мою программу в файле "xfiles" (который находится в папке "mulder" в каталоге проекта), вы должны сделать следующее:

    (gdb) r mulder/xfiles

Надеюсь, это поможет.

Отказ от ответственности: это решение не мое, оно адаптировано из https://web.stanford.edu/class/cs107/guide_gdb.html Этот короткий справочник по gdb был, скорее всего, разработан в Стэнфордском университете.