Как запустить программу с аргументами командной строки, используя GDB в скрипте Bash?

Обычно при запуске программы в GDB аргументы для программы задаются командой run. Есть ли способ запустить программу с использованием GDB, а также дать аргументы в сценарии оболочки?

Я увидел ответ в связанном вопросе, отметив, что мы можем подключить GDB к программе после того, как скрипт начнет выполняться. Но тогда мне придется "подождать" программу.

Есть ли другой способ сделать это?

Ответ 1

Вы можете запустить GDB с параметром --args,

gdb --args executablename arg1 arg2 arg3

Если вы хотите, чтобы он запускался автоматически, поместите некоторые команды в файл (например, "run") и укажите в качестве аргумента: -x/tmp/cmds. При желании вы можете работать в режиме -batch.

gdb -batch -x /tmp/cmds --args executablename arg1 arg2 arg3

Ответ 2

gdb -ex=r --args myprogram arg1 arg2

-ex=r сокращен для -ex=run и сообщает gdb немедленно запустить вашу программу, а не ждать, пока вы наберете "run" в приглашении. Тогда --args говорит, что все, что следует, это команда и аргументы, так же, как вы обычно вводите их в командной строке.

Ответ 3

Другой способ сделать это, который я лично нахожу немного более удобным и интуитивно понятным (без необходимости запоминать параметр --args), - это нормально скомпилировать и использовать r arg1 arg2 arg3 непосредственно из gdb, например:

$ gcc -g *.c *.h
$ gdb ./a.out
(gdb) r arg1 arg2 arg3

Ответ 4

Вы можете создать файл с контекстом:

run arg1 arg2 arg3 etc

program input

И называть GDB как

gdb prog < file

Ответ 5

gdb имеет --init-command <somefile>, где somefile имеет список команд gdb для запуска, я использую это, чтобы иметь //GDB комментарии в моем коде, а затем

echo "file ./a.out" > run
grep -nrIH "//GDB"|
    sed "s/\(^[^:]\+:[^:]\+\):.*$/\1/g" |
    awk '{print "b" " " $1}'|
    grep -v $(echo $0|sed "s/.*\///g") >> run
gdb --init-command ./run -ex=r

как script, который заставляет команду загружать символы отладки, а затем генерирует список команд break, чтобы поместить точку прерывания для каждого комментария //GDB и запускает запуск

Ответ 6

Если параметр --args не работает на вашем компьютере (то есть на Solaris 8), вы можете запустить gdb как

gdb -ex "set args <arg 1> <arg 2> ... <arg n>"

И вы можете комбинировать это с вводом файла в stdin и "немедленным выполнением":

gdb -ex "set args <arg 1> <arg 2> ... <arg n> < <input file>" -ex "r"

Ответ 7

Дополнение к ответу Хьюго Иделера. При использовании аргументов с префиксом, например -- или -, я не был уверен в конфликте с gdb.

Похоже, что gdb принимает в качестве аргументов программы все параметры после args.

Сначала я хотел убедиться, что я запустил GDB с кавычками вокруг ваших аргументов, он удаляется при запуске.

Это тоже работает, но необязательно:

gdb --args executablename "--arg1" "--arg2" "--arg3"

Это не работает:

gdb --args executablename "--arg1" "--arg2" "--arg3" -tui

В этом случае -tui используется как параметр моей программы, а не как параметр gdb.

Ответ 8

Вы можете установить и запустить Eclipse, а также работать/отлаживать в среде этого столетия и тысячелетий.