Как запустить программу с аргументами командной строки, используя 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, а также работать/отлаживать в среде этого столетия и тысячелетий.