Windows 10でcygwinからインタラクティブプログラム(mysqlなど)を実行すると、入力がハングし、何も実行されません。 Ctrlキーを押しながら出力すると、入力がコンソールに送信されるのを確認できます。
他のインタラクティブプログラム(pry、irb)からも奇妙な結果が見られます-すべてがWindows7で正常に機能していました。
誰かがこれを見て解決しましたか?
Cygwin環境では、Linuxコマンド「strace」を使用できます。 straceはすべてのOS <->アプリケーションの相互作用(この場合、アプリケーション<-> cygwin <-> OS)を出力し、特定のシステムコールまたはフリーズしている他の操作が明らかになるはずです。
Straceを使用するには、デバッグするアプリケーションを起動するコマンドの前にstraceコマンドを追加するだけです。たとえば、コマンドmysql
を使用してcygwinターミナルからmysqlを起動する場合は、代わりにstrace mysql
として呼び出します。
フリーズプログラムでstraceを実行した結果が明らかでない場合は、出力をPastebinまたは同等のものに投稿してください(回答に追加しようとしないでください。大量のテキストになります)。
次のステップは、gdbなどのデバッガーで実行することですが、このような場合は通常、straceで十分です。
どうやら、過去数か月の間にstraceのcygwinポートにバグが導入されたようです。 「cygwinstracesegfault」のグーグル検索ごと。私はそれを知りませんでした。 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に相当するものがないため、状況は少し厄介になります。
アップデートが起動の問題に対処する可能性は常にあり、straceは重要なポイントになります(それほど大きなチャンスではありません...)
更新後にcygwinstraceコマンドがsegfaultsになった場合、最善の策はlogger.exeなどのネイティブWindowsユーザースペースデバッガーを使用することだと思います。インストール情報は ここ にあります。
logger.exeはstraceと同様の方法で使用されますが、問題は、実際のシステムコールではなく、システムコールのcygwins変換が公開されることです。言い換えれば、OSとcygwinの相互作用のみを調べ、問題のあるプログラムの詳細がわかりにくくなる可能性があります。ただし、ハングまたはフリーズは、ほとんどの場合、リソースの制限または応答しないシステムコールのいずれかに起因する可能性があり、このメソッドはそれを明らかにします。
これは、更新後も機能する可能性のあるもの(strace)の代替として提供しているため、具体的な使用法については詳しく説明しません。基本的に(インストール後に)行うことは、straceについて説明したように、logger.exeプログラムの前にあるWindowsコマンドプロンプトからcygwinを呼び出すことです。インタラクティブなcygwinターミナルが開き、そこから評価するプログラムを起動する必要があります。 cygwinとその子プロセス「yourprogram」が実行していることを説明する膨大な量のテキストがロガーアプリケーションによって出力される必要があります。ハングが発生すると、待機している特定のシステムコールまたはリソースが明らかになるはずです。繰り返しますが、そうでない場合は、ロガー出力の全文を投稿してください。
Straceがsegfaultingである場合、最も可能性の高い原因はアンチウイルスです。
この問題を引き起こしている最新のものはマイクロトレンドです
https://cygwin.com/ml/cygwin/2016-08/msg00092.html
先月、いくつかのケースが報告されました