делая valgrind способным читать пользовательский ввод, когда это нужно c ++ - PullRequest
4 голосов
/ 11 февраля 2011

Я пытаюсь запустить мою программу на c ++ с помощью valgrind, однако у меня есть некоторые моменты в программе, которые требуют ввода данных пользователем от stdin, но когда я запускаю с помощью valgrind, он не позволяет пользователю ничего вводить для программы,обойти это?

Обыскивал, но не нашел ответа.

Ответы [ 2 ]

2 голосов
/ 12 февраля 2011

Я не пробовал, но нашел это на страницах руководства:

--input-fd=<number> [default: 0, stdin]
              Specify the file descriptor to use for reading  input  from  the
              user.  This  is  used whenever valgrind needs to prompt the user
              for a decision.

Что произойдет, если вы укажете другой fd (скажем, 3) для valgrind для ввода?

1 голос
/ 01 декабря 2011

Вот пример linux, где программа cgi (./myexe) читает из stdin.Мы помещаем вход в файл mystdin.Чтобы valgrind мог читать ввод с терминала, мы делаем --input-fd = 3 и сообщаем оболочке перенаправить / dev / tty в файловый дескриптор 3. Чтобы мы могли контролировать gdb, мы добавляем перенаправление stdin из / dev/ tty в параметре --db-command для valgrind.Это, наверное, худший пример.Надеюсь, это поможет.

valgrind --input-fd=3 --db-command='gdb -nw %f %p < /dev/tty' --db-attach=yes ./myexe < mystdin  3</dev/tty
...