У меня есть приложение на C ++, в которое мне нужно отправить сигнал об окончании передачи.
Я могу сделать Ctrl + D на консоли, но когда я пытаюсь это сделать в Eclipse, это не работает.
Я использую Eclipse Galileo с CDT.
Кажется, это еще не решенная ошибка : ошибка 159803 (устранена в сентябре 2015 года, для CDT 9.0)
Начиная с Eclipse 3.1 можно сигнализировать EOF (используя CTRL + D / Z - привязывается в предпочтениях клавиш) в представлении консоли, и Я успешно протестировал это в Eclipse 3.2.1 с помощью простого приложения Java. CDT, с другой стороны, не распознает EOF в режиме консоли. Хотя есть одно исключение . Если я запускаю локальное приложение C / C ++ и сниму флажок "Connect process input & output to a terminal" на главной вкладке конфигурации, представление консоли будет распознавать EOF. Однако это изменение не влияет на представление консоли в перспективе Debug. Поэтому во время отладки я все еще не могу отправить сигнал EOF в работающее приложение.
Начиная с Eclipse 3.1 можно сигнализировать EOF (используя CTRL + D / Z - привязывается в предпочтениях клавиш) в представлении консоли, и Я успешно протестировал это в Eclipse 3.2.1 с помощью простого приложения Java. CDT, с другой стороны, не распознает EOF в режиме консоли. Хотя есть одно исключение .
EOF
Если я запускаю локальное приложение C / C ++ и сниму флажок "Connect process input & output to a terminal" на главной вкладке конфигурации, представление консоли будет распознавать EOF.
Connect process input & output to a terminal
Однако это изменение не влияет на представление консоли в перспективе Debug. Поэтому во время отладки я все еще не могу отправить сигнал EOF в работающее приложение.
Даже если это считается "решенным", этот комментарий показывает, что проблема сохраняется.
Обновление 4 года спустя (декабрь 2014 г.), Фернандо Гонсалес-Санчес упоминает в комментариях :
Флажок обхода больше не доступен в пользовательском интерфейсе. Проблема все еще происходит в OpenSUSE 12 и Eclipse CDT Luna 4.4.1.
Обновление за март 2015:
Мухаммед Аннакиб упоминает в комментариях :
На странице ошибок указан новый обходной путь : В Kepler 4.3 eclipse.buildId = 4.3.0.M20130911-1000 в Linux проблема все еще существует в консоли Java. Я нашел следующий обходной путь: «Если оставить консоль, чтобы сфокусироваться на другом виде, а затем перефокусироваться на консоли, то Ctrl - D (EOF) будет работать, как и ожидалось."
На странице ошибок указан новый обходной путь :
В Kepler 4.3 eclipse.buildId = 4.3.0.M20130911-1000 в Linux проблема все еще существует в консоли Java. Я нашел следующий обходной путь: «Если оставить консоль, чтобы сфокусироваться на другом виде, а затем перефокусироваться на консоли, то Ctrl - D (EOF) будет работать, как и ожидалось."
В Kepler 4.3 eclipse.buildId = 4.3.0.M20130911-1000 в Linux проблема все еще существует в консоли Java. Я нашел следующий обходной путь:
«Если оставить консоль, чтобы сфокусироваться на другом виде, а затем перефокусироваться на консоли, то Ctrl - D (EOF) будет работать, как и ожидалось."
Я только что нашел решение этой проблемы:
Когда вы закончите вводить свои данные на консоли, нажмите на другое окно (редактор, Project Explorer и т. Д.), Затем снова нажмите на консоль. Нажатие Ctrl + Z теперь будет работать.
2015 обновление: я использую eclipse luna 4.4.1 для Mac, и EOF все еще не работает в консоли. Просто замерзает затмение.
Один из способов, которым вы могли бы подумать об отправке ctrl + d на консоль, - это сделать небольшую вставку BASH в аргументы вашей программы. Например, добавление чего-то вроде «& sleep 10 && echo -e '\ x04 \ c'> / dev / stdin» будет ждать 10 секунд перед отправкой команды ctrl-D. хотя вы могли бы легко изменить его и для других условий, не связанных со временем. Кроме того, вы можете открыть / dev / stdin из вашей программы на C ++ в виде файла, затем записать в него значение 0x04 и выполнить сброс для достижения того же эффекта от вашей программы.