2

Когда я запускаю интерактивную программу (например, mysql) из cygwin в Windows 10, ввод просто зависает и ничего не делает. Если я нажимаю ctrl-c, я вижу, как ввод отправляется на консоль.

Я также вижу странные результаты других интерактивных программ (pry, irb) - на Windows 7 все работало нормально.

Кто-нибудь видел это и решил?

2 ответа2

3

В среде cygwin доступна команда linux 'strace'. strace выводит все взаимодействия между приложениями ОС <-> (в данном случае, приложением <-> cygwin <-> ОС), а также конкретный системный вызов или другие операции, на которых он «зависает».

Чтобы использовать strace, просто добавьте команду strace перед командой, которая запускает приложение, которое вы хотите отладить. Например, если вы запускаете mysql из терминала cygwin с помощью команды mysql , вместо этого вызовите его как strace mysql .

Если вывод от запуска strace в программах замораживания не очевиден, пожалуйста, опубликуйте вывод в pastebin или аналогичный (не пытайтесь добавить к своему ответу, это будет огромный объем текста).

Следующим шагом будет запускать его с отладчиком, таким как gdb, но в таком случае обычно достаточно этого strace.

Обновить

По-видимому, за последние пару месяцев в порте cygwin strace была обнаружена ошибка; согласно поиску в Google 'cygwin strace seg fault'; Я не знал об этом. Так как strace - лучший инструмент для этой работы, попробуйте обновить установку cygwin, чтобы увидеть, было ли исправление преднамеренно или случайно. Чтобы обновить установку cygwin, используйте следующую последовательность команд:

wget -NP /usr/local/bin/ http://cygwin.com/setup-x86_64.exe
chmod u+x /usr/local/bin/setup-x86_64.exe
/usr/local/bin/setup-x86_64.exe -n

Источник

После обновления попробуйте еще раз. Если он по-прежнему происходит с ошибками, все становится немного сложнее, поскольку GDB гораздо менее прост в использовании, и в среде Cygwin, о которой я знаю, нет реальных эквивалентов для использования.

Всегда есть вероятность, что обновление решит ваши проблемы с запуском, и strace станет спорным вопросом (не очень большой шанс ...)

Обновление 2

Если после обновления команда cygwin strace произойдет сбой, я думаю, что вам лучше всего использовать собственный отладчик пространства пользователя Windows, такой как logger.exe. Информация об установке может быть найдена здесь.

logger.exe используется аналогичным образом, проблема заключается в том, что теперь у вас будет Cygwins-трансляция системных вызовов программ, а не реальных системных вызовов. Другими словами, он будет рассматривать только взаимодействие ОС с cygwin, а специфика программы-нарушителя может быть запутана. Однако зависание или зависание почти всегда можно отнести либо к ограничению ресурсов, либо к системному вызову, не отвечающему на запросы, и этот метод разоблачит это.

Так как я предлагаю это как альтернативу чему-то (strace), которое может все еще работать после обновления, я не буду вдаваться в подробности его конкретного использования. По сути, то, что вы будете делать (после установки), это вызов cygwin из командной строки Windows с добавлением программы logger.exe, как я описал strace. После этого откроется интерактивный терминал cygwin, и вам нужно запустить программу, которую вы оцениваете по этой ссылке. Приложение регистратора выводит огромное количество текста, описывающего, что делает cygwin и его дочерний процесс "ваша программа". Когда происходит зависание, должен быть очевиден конкретный системный вызов или ожидаемый ресурс. Опять же, если это не так, опубликуйте полный текст вывода логгера.

3

Если strace является segfaulting, наиболее вероятной причиной является антивирус.

Самый последний, вызывающий эту проблему - Micro Trend

https://cygwin.com/ml/cygwin/2016-08/msg00092.html

За последний месяц было зарегистрировано несколько случаев заболевания.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .