Ответ 1
Сначала вы можете запустить программу и отладить ее с помощью pid. Это решение, разумеется, не распространяется на все случаи.
Другой подход - использовать возможности Linux для межпроцессного общения. Короче говоря, вы перенаправляете вывод ret
в специальный файл FIFO ( "named pipe" ), а затем читаете из этого FIFO через отладчик. Вот как это делается. Из bash запустите:
mkfifo foo
Это создает специальный файл в вашем каталоге, который будет служить именованным каналом. Когда вы пишете текст в этот файл (используя тот же синтаксис echo "Hello" >foo
), программа записи будет блокироваться, пока кто-то не прочитает данные из файла (например, cat <foo
). В нашем случае из этого файла будет считываться процесс, управляемый gdb.
После того, как вы создали fifo, запустите с bash:
ret > foo & # ampersand because it may block as nobody is reading from foo
gdb blah
Затем в командной строке gdb запустите
run <foo
И получите желаемый эффект. Обратите внимание, что вы не можете читать данные из fifo (а также из обычного канала) дважды: когда вы прочитали все данные, процесс blah
умирает, и вы должны повторить команду, написанную в foo (вы можете сделайте это из другого окна оболочки).
Когда вы закончите, удалите fifo с помощью rm foo
(или поместите его в каталог, где он будет автоматически удален при перезагрузке системы, например /tmp
).