Обычно при запуске программы в GDB аргументы для программы указываются в run
команде. Есть ли способ запустить программу с использованием GDB, а также дать аргументы в сценарии оболочки?
Я увидел ответ в связанном вопросе, отметив, что мы можем подключить GDB к программе после того, как скрипт начнет выполняться. Но тогда мне придется «подождать» программу.
Есть ли другой способ сделать это?
Ответы:
Вы можете запустить GDB с параметром --args,
Если вы хотите, чтобы он запускался автоматически, поместите несколько команд в файл (например, «run») и укажите в качестве аргумента: -x / tmp / cmds. При желании вы можете работать в режиме -batch.
источник
man gdb
не содержит--args
, поэтому я не нашел его.gdb --help
делает.info gdb
следующий раз :-).info
. Если Google или Stack Overflow перестанут работать, XDindex-search
). Попробуйте:,info gdb
затем «я», затем «--args». Это приведет вас прямо к этому.-ex=r
означает сокращение-ex=run
и указывает gdb на немедленное выполнение вашей программы, вместо того, чтобы ждать, пока вы наберете «run» в командной строке. Затем--args
говорит, что все, что следует, это команда и аргументы, так же, как вы обычно вводите их в командной строке.источник
-exe=r
очень полезном!Другой способ сделать это, который я лично нахожу немного более удобным и интуитивно понятным (без необходимости запоминания
--args
параметра), - это нормально скомпилировать и использоватьr arg1 arg2 arg3
напрямую изнутриgdb
, например, так:источник
Вы можете создать файл с контекстом:
И называть GDB, как
источник
В GDB есть
--init-command <somefile>
файл somefile для запуска списка команд GDB, я использую это для//GDB
комментариев в своем коде, затем `как сценарий, который помещает команду для загрузки символов отладки, а затем генерирует список команд прерывания, чтобы поставить точку останова для каждого
//GDB
комментария, и запускает ее выполнениеисточник
Если
--args
параметр не работает на вашей машине (то есть на Solaris 8), вы можете запустить gdb какИ вы можете комбинировать это с вводом файла в stdin и «немедленным выполнением»:
источник
В дополнение к ответу Хьюго Иделера. При использовании аргументов с префиксом, например,
--
or-
, я не был уверен в конфликте с gdb.Похоже, GDB принимает все после
args
опции в качестве аргументов для программы.Сначала я хотел убедиться, что я запустил gdb с кавычками вокруг ваших аргументов, он удаляется при запуске.
Это тоже работает, но необязательно:
Это не работает:
В этом случае
-tui
используется в качестве параметра моей программы, а не как GDB.источник
Слишком поздно, но вот метод, который работает во время
gdb
сеанса.тогда
Это вернет много совпадений, полезный
set args
.тогда
Это запустит программу, передавая main (argc, argv) аргументы и количество аргументов.
источник