运行与调试
构建并运行、运行、附加三种启动;F5 之后每一步失败时的提示;调试期间的面板与输出;launch.json 字段;Flutter 的 Dart 调试。
选好手机后在源码中打断点,按 F5 即可,插件依次完成构建、签名、安装、启动和调试,不需要任何配置。断点命中后使用 VS Code 标准的调试视图。下面是 Windows 上真机运行和调试的效果。
三种启动方式
| 方式 | 入口 | 说明 |
|---|---|---|
| 构建并运行 | F5、视图标题栏 ▶、target 行内按钮 | 按当前配置构建、签名、安装到选中设备、启动并附加调试器 |
| 运行 | 「KXBuild: 运行」、target 行内按钮 | 不构建,直接安装上一次的构建产物并启动 |
| 附加 | 「KXBuild: 附加到运行中的 App」 | 列出手机上正在运行的应用,选一个附加调试器 |
构建发生在调试会话之前,调试工具栏上的「重启」不会重新编译。改了代码要停止后重新按 F5。
常见错误
构建完成后的每一步都有进度通知,可以取消。哪一步失败就提示哪一步,点「Show Output」查看完整日志。
| 提示 | 处理 |
|---|---|
| No iOS device selected | 在 KXBuild 视图中选一台设备 |
| Developer Mode is off | 手机上打开开发者模式并重启 |
| Developer Disk Image is not mounted | 重新插拔手机或运行体检 |
| 设备尚未配对 / 信任 | 解锁手机并点信任 |
| 存储空间不足 | 清理手机空间后重试 |
| 没有有效的描述文件、设备不在描述文件中 | 见证书与签名 |
| did not report the app as launched in time | 解锁手机,检查连接 |
| didn't start in time | App 可能启动即崩溃,查看设备日志 |
调试期间
Swift、Objective-C、C / C++ 和 Kotlin Multiplatform 的 Kotlin 代码都可以设置断点,单步、变量、调用栈、监视和调试控制台都是标准调试视图,调试控制台可以输入 lldb 命令。停在没有源码的位置时打开汇编视图。 App 的输出显示在「输出 → KXBuild Console」,构建日志在「输出 → KXBuild」。调试结束会退出手机上的 App,和 Xcode 一致。
launch.json
默认按 F5 即可启动,不需要 launch.json。想固定某个设备、target 或构建配置时,再手动编辑 launch.json,调试器类型写 kxbuild。配置样式和字段说明如下。
{
"version": "0.2.0",
"configurations": [
{ "type": "kxbuild", "request": "launch", "name": "KXBuild: Build & Run", "build": true },
{ "type": "kxbuild", "request": "launch", "name": "KXBuild: Run", "build": false },
{ "type": "kxbuild", "request": "attach", "name": "KXBuild: Attach", "attachPid": 0 }
]
}| 字段 | 说明 |
|---|---|
| build | true 先构建再安装,false 直接安装上一次的产物 |
| device | 设备 UDID,留空用视图中选中的设备 |
| bundle | 要运行的应用 target 的 Bundle ID,留空用工程中唯一的应用 target,有多个时弹出选择 |
| configuration | Debug 或 Release,留空用视图中选中的 |
| attachPid | 附加时的进程 pid,0 表示运行时弹出列表选择 |
Flutter
Flutter 工程按 F5 可以直接调试原生 Objective-C 和 Swift 代码。要调试 Dart 代码需要 VS Code 的 Dart 扩展。检测到是 Flutter 工程但没装 Dart 扩展时会提示一键安装,安装后重新「构建并运行」,之后原生断点和 Dart 断点同时生效,支持热重载。
React Native
React Native 和 Expo 可通过 KXBuild 调试原生部分,JS 断点使用 Metro / Hermes 自己的调试器。uni-app 导入后是原生壳加 WebView,原生部分在 KXBuild 里调试,页面 JS 用 HBuilderX 自带的调试工具。