Как загружать чтение программы stdin и принимать параметры в gdb?

У меня есть программа, которая принимает stdin, а также принимает некоторые параметры из командной строки. Это выглядит так:

cat input.txt > myprogram -path "/home/user/work"

Я пытаюсь отладить код с помощью gdb внутри emacs, M-x gdb, я пытаюсь загрузите программу командой:

gdb cat input.txt > myprogram -path "/home/user/work"

Однако gdb ему не нравится.

Вопрос, взятый из здесь. К сожалению, я не понимаю решения и не уверен, что делать, кроме компиляции с опцией -g и запускающей команду M-x gdb.

Ответ 1

Если вы делали это из оболочки, вы сделали бы это следующим образом:

% gdb myprogram
gdb> run params ... < input.txt

Это похоже на работу с emacs тоже.

Ответ 2

Есть несколько способов сделать это:

$ gdb myprogram
(gdb) r -path /home/user/work < input.txt

или

$ gdb myprogram
(gdb) set args -path /home/user/work < input.txt
(gdb) r

или

$ gdb -ex 'set args -path /home/user/work < input.txt' myprogram
(gdb) r

где команда gdb run (r) использует по умолчанию аргументы, установленные ранее с помощью set args.

Ответ 3

Для полноты использования при запуске сеанса отладки существует также опция -args. то есть)

gdb gdbarg1 gdbarg2 --args yourprog arg1 arg2 -x arg3

Ответ 4

И если вам не нужно отлаживать с самого начала, вы также можете подключиться к уже запущенному процессу, используя:

$ gdb myprogram xxx

где xxx - идентификатор процесса. Тогда вам не нужно указывать gdb исходные аргументы.