Techioz Blog

VSCode Ruby デバッガで 127.0.0.1 p1234 に複数のアクティブな接続が表示されるのはなぜですか

概要

VSCode で Ruby プログラムをデバッグできないエラーが発生する

ECONNREFUSED ::1:1234

デバッグコンソールでは、最初のデバッグセッションを終了せずにデバッグセッションを開始したときに発生するのと同じエラーが発生すると思います。通常、再起動または再起動によって問題が解決します。私の場合、何度も再起動し、一度電源を切りました。また、ネットワークのリセットに関するWeb上のいくつかの投稿にも従いましたが、助けになりませんでした。

電源を切った後、vscode を実行する前に (最初に何も実行しません) netstat -a を実行したところ、127.0.0.1:1234 に対してアクティビティが表示されませんでした。

vscode とコマンドを実行すると、アクティブな接続が表示されます。

 TCP    127.0.0.1:1234         XPS:0                  LISTENING 

netstat -a は、vscode が終了した後も同じことを報告します。注 netstat -b では、そのポートでのアクティビティが表示されません。

私が行った最後のステップは、vscode を再インストールし、Ruby、VSCode rdgb、VSCode Ruby を除くすべての拡張機能を無効にすることでした。結果は

Fatal exception in DebugThread loop: Only one usage of each socket address (protocol/network address/port) is normally permitted. - bind(2) for "127.0.0.1" port 1234

実行中のプログラムは

puts  "starting"; exit

そしてlaunch.jsonは

{
            "name": "MAIN",
            "type": "Ruby",
            "request": "launch",
            "cwd": "${workspaceRoot}",
            "program": "${workspaceRoot}/main.rb"
        },

他のプログラムをデバッグすると (変更されておらず、以前は問題がありませんでした)、同じ結果が得られますが、デバッグ モードではない場合は完了するまで実行されます。

私も約 2 年前に同様の問題を抱えていましたが、数日間複数のことを試した後、問題が修正された理由を特定できないまま、単に問題が消えてしまいました。

問題が発生する前は、Gemfile を使用して更新を制御する記事を参照しながら、バンドラーのインストールを実行することがリモート関連で実行されていました。

解決策

この質問を書いているときに sysinternals を調べたところ、次のような tcpview が見つかりました。

ruby.exe,18668,TCP,Listen,127.0.0.1,1234,0.0.0.0,0,9/16/2023 12:33:37 PM,ruby.exe,,,,

tcpviewを使用してプロセスを強制終了し(メインのVSCODEウィンドウが終了していないことに注意してください)、vscodeを再実行すると、

C:/Ruby32-x64/lib/ruby/gems/3.2.0/gems/ruby-debug-ide-0.7.3/lib/ruby-debug-ide.rb:106: warning: undefining the allocator of T_DATA class Debase::Context

どのようなエラーなのかはわかりませんが、この問題とは関係ありません。

プログラムはデバッグ モードで複数回実行されて完了したため、問題に対する暫定的な解決策のように見えます。

注意 tcpview netstat -a でプロセスを強制終了すると、127.0.1 ポート 1234 でのアクティビティが報告されなくなります。

注: 最初に終了せずに誤って 2 番目のデバッグ プロセスを実行した場合には、良い解決策のように見えます。これを証明するために、ブレークポイントで停止した状態で新しいデバッグセッションを複数回開始してみました。複数接続エラーは一度も発生しませんでした。問題が解決されたようです。