@@ -158,14 +158,19 @@ def setup_remote_debuggee(cmd)
158
158
remote_info . debuggee_backlog = [ ]
159
159
160
160
line = nil
161
+ msg1 = msg2 = nil
161
162
162
163
Timeout . timeout ( TIMEOUT_SEC ) do
163
164
line = remote_info . r . gets
164
165
remote_info . debuggee_backlog << line
165
166
166
- # wait for first "wait for debugger connection" output
167
- break if /wait for debugger connection/ =~ line
168
- redo
167
+ # wait for two lines (order is unstable)
168
+ case line
169
+ when /\A DEBUGGER: Debugger can attach via/
170
+ msg1 = true
171
+ when /\A DEBUGGER: wait for debugger connection/
172
+ msg2 = true
173
+ end
169
174
end
170
175
171
176
remote_info . reader_thread = Thread . new ( remote_info ) do |info |
@@ -191,14 +196,16 @@ def setup_unix_domain_socket_remote_debuggee
191
196
remote_info
192
197
end
193
198
194
- # search free port by opening server socket with port 0
195
- Socket . tcp_server_sockets ( 0 ) . tap do |ss |
196
- TCPIP_PORT = ss . first . local_address . ip_port
197
- end . each { |s | s . close }
198
-
199
199
def setup_tcpip_remote_debuggee
200
- remote_info = setup_remote_debuggee ( "#{ RDBG_EXECUTABLE } -O --port=#{ TCPIP_PORT } -- #{ temp_file_path } " )
201
- remote_info . port = TCPIP_PORT
200
+ remote_info = setup_remote_debuggee ( "#{ RDBG_EXECUTABLE } -O --port=0 -- #{ temp_file_path } " )
201
+ port = nil
202
+ remote_info . debuggee_backlog . each { |line |
203
+ if /Debugger can attach via TCP\/ IP \( .+:(\d +)\) / =~ line
204
+ port = $1. to_i
205
+ end
206
+ }
207
+ raise "can not find TCP/IP port with backlog: #{ remote_info . debuggee_backlog . inspect } " unless port
208
+ remote_info . port = port
202
209
Timeout . timeout ( TIMEOUT_SEC ) do
203
210
sleep 0.001 until remote_info . debuggee_backlog . join . include? remote_info . port . to_s
204
211
end
0 commit comments