Problema de bloqueo de Windows 10 y cygwin

Problema de bloqueo de Windows 10 y cygwin

Cuando ejecuto un programa interactivo (mysql por ejemplo) desde cygwin en Windows 10, la entrada simplemente se bloquea y no hace nada. Si presiono Ctrl-c puedo ver que la entrada se envía a la consola.

También veo resultados extraños en otros programas interactivos (pry, irb): todo funcionaba bien en Windows 7.

¿Alguien ha visto esto y lo ha solucionado?

Respuesta1

Si strace tiene un error de segmentación, la causa más probable es un antivirus.

El más reciente que causa este problema es Micro Trend.

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

Se reportaron varios casos por ello en el último mes

Respuesta2

En el entorno cygwin, el comando de Linux 'strace' está disponible. strace genera todas las interacciones de la aplicación OS <--> (en este caso, aplicación <--> cygwin <--> OS), y la llamada al sistema específica u otra operación en la que se está congelando debe ser evidente.

Para usar strace, simplemente anteponga el comando strace antes del comando que inicia la aplicación que desea depurar. Por ejemplo, si está iniciando mysql desde la terminal cygwin usando el comando mysql, llámelo como strace mysql.

Si el resultado de ejecutar strace en los programas de congelación no es evidente, publíquelo en Pastebin o equivalente (no intente agregarlo a su respuesta, será una gran cantidad de texto).

El siguiente paso sería ejecutarlo con un depurador como gdb, pero en un caso como este suele ser suficiente.

Actualizar

Aparentemente se introdujo un error en el puerto cygwin de strace en los últimos meses; según una búsqueda en Google de 'falla de segmento de cygwin strace'; No era consciente de eso. Dado que strace es la mejor herramienta para este trabajo, intente actualizar su instalación de cygwin para ver si se introdujo una solución intencional o inadvertidamente. Para actualizar su instalación de cygwin, utilice la siguiente secuencia de comandos:

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

Fuente

Después de actualizar, inténtalo de nuevo. Si todavía tiene errores de segmentación, las cosas se vuelven un poco más complicadas ya que gdb es mucho menos fácil de usar y no hay equivalentes reales a strace disponibles en el entorno cygwin que yo sepa actualmente.

Siempre existe la posibilidad de que la actualización solucione los problemas de lanzamiento y strace se convierta en un punto discutible (no es una gran posibilidad...)

Actualización 2

Si el comando cygwin strace falla después de la actualización, creo que lo mejor es utilizar un depurador nativo de espacio de usuario de Windows como logger.exe. La información de instalación se puede encontraraquí.

logger.exe se usa de manera similar a strace, el problema es que ahora tendrá expuestas las traducciones cygwins de las llamadas al sistema del programa, no las llamadas al sistema reales. En otras palabras, solo observará las interacciones entre el sistema operativo y cygwin, y los detalles del programa infractor pueden quedar confusos. Sin embargo, un bloqueo o una congelación casi siempre se puede atribuir a una limitación de recursos o a una llamada al sistema que no responde, y este método lo expondrá.

Dado que estoy ofreciendo esto como una alternativa a algo (strace) que aún podría funcionar después de la actualización, no voy a entrar en detalles sobre su uso específico. Básicamente, lo que hará (después de la instalación) es llamar a cygwin desde un símbolo del sistema de Windows precedido por el programa logger.exe, tal como describí strace. Luego se abrirá una terminal cygwin interactiva y deberá iniciar el programa que está evaluando desde allí. La aplicación de registro (debería) generar una enorme cantidad de texto que describa lo que están haciendo cygwin y su proceso hijo "su programa". Cuando se produce un bloqueo, la llamada al sistema específica o el recurso que se está esperando debe ser evidente. Nuevamente, si no es así, publique el texto completo del resultado del registrador.

información relacionada