慢主要是因为默认要做 Bonjour/mDNS 发现 并可能扫 无线设备
但是用 flutter attach --debug-url 'http://127.0.0.1:57198/c2COwFS26xM=/'会快很多
可以通过设置launch.json
在项目根目录 .vscode/launch.json 里加一个 attach 配置,写上你从 Xcode / flutter run 控制台复制的那行 VM Service 地址(每次运行会变,要改 URL):
{
"version": "0.2.0",
"configurations": [
{
"name": "Flutter Attach (vmServiceUri)",
"type": "dart",
"request": "attach",
"vmServiceUri": "http://127.0.0.1:端口号/xxxxxxxx=/"
}
]
}
Run and Debug 里选 「Flutter Attach (vmServiceUri)」 再启动,等价于带 --debug-url,一般就不会再长时间 Waiting…。
若扩展版本较老仍认 observatoryUri,可二选一或两个都试一下(多数新版本已统一为 vmServiceUri)。
注意:http://127.0.0.1:... 这一整串 每次重新 Run App 都会变,需要重新从控制台复制,或写个小脚本/快捷方式替换。
怎么用: 左侧 Run and Debug,下拉选 「Flutter Attach (vmServiceUri)」,点绿色运行;先保证本机已用 Xcode/flutter run 把 App 跑起来且 端口 57660 仍对应这次会话(关 App 或重跑后地址会变)。
重要: 文件里加了注释说明——每次重新 Run,都要把控制台里新的 http://127.0.0.1:.../...=/ 整段替换进 vmServiceUri,否则连不上。
VM Service怎么获取?
#if DEBUG
/// 轮询等待 `vmServiceUrl` 非空后输出(仅 Debug/Profile 引擎有值,Release 恒为 nil)
private static func logDartVmServiceUrlWhenReady(_ engine: FlutterEngine) {
let maxAttempts = 24
let interval: TimeInterval = 0.5
func tryLog(attempt: Int) {
if let url = engine.vmServiceUrl {
let msg = "[Flutter] Dart VM Service URL: \(url.absoluteString)"
NSLog("%@", msg)
print(msg)
return
}
guard attempt + 1 < maxAttempts else {
NSLog("[Flutter] vmServiceUrl 仍为 nil(已重试 %d 次)。请确认 Xcode 为 Debug、且使用 FLUTTER_DEBUG 本地引擎。", maxAttempts)
return
}
DispatchQueue.main.asyncAfter(deadline: .now() + interval) {
tryLog(attempt: attempt + 1)
}
}
DispatchQueue.main.asyncAfter(deadline: .now() + 0.2) {
tryLog(attempt: 0)
}
}
#endif
这样运行完项目之后 宿主项目会出现
[Flutter] Dart VM Service URL: http://127.0.0.1:57660/Tyti836RT1E=/
这个是每次都变的 注意attach时替换