Выход Eclipse CDT Console не отображается при отладке с путем и не отображается при запуске без пути - PullRequest
3 голосов
/ 02 марта 2012

Я пытаюсь заставить Eclipse CDT (64-битное затмение) работать на Windows 7 с GCC. Когда я впервые запустил GDB (что само по себе было проблемой), запуск программы в режиме отладки был единственным способом получения результатов. Запуск его нормально не давал консольного вывода. После нескольких часов поисков в Google, я понял, что если я добавлю C: / cygwin / bin в мой путь к среде в eclipse, я смогу получить вывод при обычном запуске программы. Затем я запустил его в режиме отладки, и не было никакого вывода. Я проверял это пару раз, чтобы убедиться, что это добавление пути, вызывающего проблему. Это программа, которую я запускал,

#include <iostream>

using namespace std;

int main() {
    cout << "Hello World!" << endl;
    return 0;
}

Итак, как мне заставить работать как нормальный, так и отладочный режимы, и почему я должен был сначала включить этот путь (он уже находится в моем пути cygwin и зачем он нужен CDT?)? Кроме того, почему, если я добавлю путь к моим конфигурациям Run, он также будет добавлен к моим конфигурациям Debug?

Ответы [ 5 ]

8 голосов
/ 12 декабря 2012

С wiki eclipse : В Eclipse CDT в Windows стандартный вывод выполняемой или отлаживаемой программы полностью буферизуется, поскольку он подключен не к консоли Windows, а к каналу.См. ошибка 173732 для получения более подробной информации.Либо добавляйте вызовы сброса после каждого printf, либо добавляйте следующие строки в начале основной функции:

setvbuf(stdout, NULL, _IONBF, 0);
setvbuf(stderr, NULL, _IONBF, 0); 
6 голосов
/ 09 марта 2012

Не думаю, что могу ответить на все вопросы, но я использую точно такую ​​же настройку, что и вы, и мне пришлось столкнуться с довольно многими проблемами, подобными этой (мне интересно, если у вас возникли проблемы, как манипулировать, используя 32-разрядная / 64-разрядная JVM и работа в Интернете)!

Должен быть указан путь к cygwin / bin, потому что именно там находятся gcc, gdb и все другие инструменты и библиотеки cygwin (я предполагаю, что вы используете версию gcc cygwin, а не версию MinGW). Я считаю, что вы должны указать это в среде Windows (используя путь к файлу win32), потому что Eclipse работает с использованием JVM для Windows и, следовательно, имеет дело с путями win32. Следовательно, не имеет значения, что cygwin/bin добавляется к переменной PATH в среде cygwin. CDT ищет cygwin с помощью Eclipse, и Eclipse должен найти cygwin1.dll из Windows.

Я могу быть совершенно не прав, но если бы мне пришлось угадывать, я бы сказал, что вам нужно быть абсолютно уверенным, что вы правильно установили переменную окружения PATH для обеих конфигураций.

Следует отметить, что в Eclipse нет разницы между конфигурацией, показанной в окне Debug Configurations , и конфигурацией с тем же именем в Run Configurations окно. Единственное различие между двумя окнами заключается в том, что одно из них запускает программу без использования отладчика и имеет вкладки для настройки параметров отладки. Поэтому неудивительно, что изменение настроек в одном из них также повлияет на другое.

Как вы, возможно, знаете, для многих проектов система сборки настроена на создание двух (иногда больше) наборов двоичных файлов: один с отладочной информацией / символами (DEBUG) и один без (RELEASE). В этом случае у вас обычно есть две конфигурации в Eclipse: одна для запуска двоичного файла DEBUG и одна для запуска двоичного файла RELEASE. Оба они будут отображаться как в окне Debug Configurations , так и в окне Run Configurations . Дело в том, что вы можете запускать DEBUG с GDB или без, но RELEASE не может использоваться GDB.

Тем не менее, я не уверен, почему добавление правильного пути к конфигурации запуска остановит вывод двоичного файла DEBUG на консоль. Я подозреваю, что здесь происходит что-то еще, возможно, несоответствие отладочной информации и отладчика.

Чтобы (надеюсь) ответить на ваш вопрос о том, как заставить работать обе конфигурации, перейдите на полную и просто добавьте C:\cygwin\bin; в переменную среды Windows PATH. Я предполагаю, что это позволит обоим работать. Я предполагаю, что вы знаете, как это сделать, но, пожалуйста, оставьте комментарий, если нет.

Еще одна попытка - это скомпилировать и запустить программу из оболочки cygwin. Если он работает там, вероятно, можно поспорить, что ваша переменная окружения PATH установлена ​​неправильно при использовании eclipse.

Надеюсь, это поможет!

3 голосов
/ 15 мая 2012

Добавление пути было правильным до GDB 7.3.Теперь, когда я добавляю путь, я больше не могу использовать точки останова, поскольку он не может найти файлы dll, так как они больше не являются частью пути.Чтобы это исправить, вы можете легко добавить весь путь из среды, следуя этим инструкциям.

left click the project
enter the RUN/DEBUG settings for the project
select the executable
click edit
select Environment Tab
click Select...
scroll down to Path (Case sensitive)
check mark Path
press OK
press OK
press OK

Вы можете увидеть проблему с dll, которая появляется в ошибке консоли gdb, msg = "Во время запуска программы выходкод 0xc00000be. "или ошибка, msg = "Во время запуска программы выход с кодом 0x00000135."и может появиться всплывающее окно с сообщением о невозможности очистки точки останова

2 голосов
/ 27 июня 2013

Вам необходимо настроить компоновщик, который я использую MinGW.

Выполните следующие шаги.

Goto Project > Properties > C/C++ Build > Settings > Tool Settings (Tab) > MinGW C++ Linker (Option) > Add Command (g++ -static-libgcc -static-libstdc++)   (default command is only g++)
0 голосов
/ 02 марта 2013

Не отлаживайте и не запускайте приложения C или C ++ из Eclipse, если они предназначены для Cygwin. TK ссылка на мем "у тебя будет плохое время".

Существуют проблемы с Cygwin stdout / stderr, которые не отображаются, если вы запускаете программы с обычной консоли Cygwin (где вы будете запускать bash), но они отображаются практически во всех других случаях, когда вы можете запустить их.

Обычный способ запуска программ другими программами в Linux и других поддерживающих posix средах - это перенаправить ввод / вывод в pty. Cygwin не может поддерживать pty на 100% в Windows.

Некоторые проблемы могут быть исправлены вызовами setvbuf в ответе @ infoartenovo.

Обратная сторона этой проблемы заключается в том, что приложения, написанные для использования Windows Console API, не работают в ptys.

Мы все несем побочный урон в войне без побед.

http://cygwin.com/ml/cygwin/2011-12/msg00236.html https://code.google.com/p/mintty/issues/detail?id=56

...