跳到主内容

使用原生语言调试器

如何将原生调试器连接到正在运行的 Flutter 应用。

如果你仅使用 Dart 代码编写 Flutter 应用,可以使用 IDE 的调试器进行调试。Flutter 团队推荐使用 VS Code。

如果你编写了平台相关的插件或使用了平台相关的库,可以使用原生调试器调试那部分代码。

  • 要调试使用 Swift 或 Objective-C 编写的 iOS 或 macOS 代码,可以使用 Xcode。
  • 要调试使用 Java 或 Kotlin 编写的 Android 代码,可以使用 Android Studio。
  • 要调试使用 C++ 编写的 Windows 代码,可以使用 Visual Studio。

本指南展示了如何为你的 Dart 应用连接两个调试器:一个用于 Dart,另一个用于原生代码。

调试 Dart 代码

#

本指南介绍了如何使用 VS Code 调试 Flutter 应用。你也可以在安装并配置了 Flutter 和 Dart 插件的情况下使用你偏好的 IDE。

使用 VS Code 调试 Dart 代码

#

以下过程说明了如何对默认的 Flutter 示例应用使用 Dart 调试器。VS Code 中的特色组件在你调试自己的 Flutter 项目时同样有效且可见。

  1. 创建一个基础的 Flutter 应用。

    flutter create my_app
    
    Creating project my_app...
    Resolving dependencies in my_app...
    Got dependencies in my_app.
    Wrote 129 files.
    
    All done!
    You can find general documentation for Flutter at: https://docs.fluttercn.cn/
    Detailed API documentation is available at: https://api.flutter.dev/
    If you prefer video documentation, consider: https://www.youtube.com/c/flutterdev
    
    In order to run your application, type:
    
      $ cd my_app
      $ flutter run
    
    Your application code is in my_app/lib/main.dart.
    
    cd my_app
    
  2. 使用 VS Code 打开 Flutter 应用中的 lib\main.dart 文件。

  3. 点击虫子图标(用于触发 Flutter 应用调试模式的 VS Code 虫子图标)。这会在 VS Code 中打开以下窗格

    • 调试 (Debug)
    • 调试控制台 (Debug Console)
    • Widget 检查器 (Widget Inspector)

    首次运行调试器时耗时最长。

  4. 测试调试器。

    a. 在 main.dart 中,点击这一行

    dart
    _counter++;
    

    b. 按 Shift + F9。这会在 _counter 变量递增处添加一个断点。

    c. 在应用中,点击 **+** 按钮以递增计数器。应用将暂停。

    d. 此时,VS Code 将显示

    • 编辑器组 (Editor Groups)
      • main.dart 中高亮的断点
      • Widget 检查器组件树 (Widget Tree) 中 Flutter 应用的组件层级结构
    • 侧边栏 (side bar)
      • 调用堆栈 (Call Stack) 部分中应用的状态
      • 变量 (Variables) 部分中 this 局部变量的值
    • 面板 (panel)
      • 调试控制台 (Debug console) 中 Flutter 应用的日志

VS Code Flutter 调试器

#

VS Code 的 Flutter 插件为 VS Code 用户界面增加了一些组件。

VS Code 界面变更

#

启动时,Flutter 调试器会向 VS Code 界面添加调试工具。

以下截图和表格解释了每个工具的用途。

VS Code with the Flutter plugin UI additions

截图中的高亮颜色栏、面板或标签页内容
黄色 变量 (Variables) Flutter 应用中当前变量值的列表
监视 (Watch)你选择在 Flutter 应用中跟踪的项的列表
调用堆栈 (Call Stack)Flutter 应用中活动子程序的堆栈
断点 (Breakpoints)你设置的异常和断点的列表
绿色 <Flutter 文件> 你正在编辑的文件
粉色 Widget 检查器 (Widget Inspector) 运行中 Flutter 应用的组件层级结构
蓝色 布局资源管理器 (Layout Explorer) 你在 Widget 检查器中选中的组件的布局可视化
组件详情树 (Widget Details Tree) 你在 Widget 检查器中选中的组件的属性列表
橙色 问题 (Problems) Dart 分析器在当前 Dart 文件中发现的问题列表
输出 (Output)构建应用时 Flutter 应用返回的响应
调试控制台 (Debug Console) 调试过程中 Flutter 应用生成的日志或错误消息
终端 (Terminal)VS Code 中包含的系统 shell 提示符

要更改面板(橙色)在 VS Code 中的位置,请前往 **视图 (View)** > **外观 (Appearance)** > **面板位置 (Panel Position)**。

VS Code Flutter 调试工具栏

#

该工具栏允许你使用任何调试器。你可以单步跳入、跳出或跨过 Dart 语句、进行热重载或恢复应用运行。

Flutter debugger toolbar in VS Code

图标动作默认键盘快捷键
Small blue vertical line with a blue triangle that indicates playing or resuming the Flutter app
启动或恢复F5
Small blue double vertical line that indicates pausing the Flutter app
暂停F6
Small blue arched arrow over a blue circle that indicates skipping the current block or statement in the Flutter app
单步跳过F10
Small blue downward arrow over a blue circle that indicates going into the next function in a Flutter app
单步跳入F11
Small blue upward arrow over a blue circle that indicates exiting the current function after one passthrough in a Flutter app
单步跳出Shift + F11
Small yellow lightning bolt that indicates reloading the UI of a Flutter app without resetting any state values
热重载Ctrl + F5
Small green almost circular arrow that indicates reloading the UI of a Flutter app and resetting any state values
热重启Shift + Special + F5
Red empty square that indicates you want to stop the running Flutter app
停止Shift + F5
Small blue magnifying class with the Flutter logo inside it that opens the Widget inspector
打开 Widget 检查器

更新测试 Flutter 应用

#

在本指南的其余部分,你需要更新测试 Flutter 应用。此更新会添加用于调试的原生代码。

  1. 使用你偏好的 IDE 打开 lib/main.dart 文件。

  2. 用以下代码替换 main.dart 的内容。

    展开以查看此示例的 Flutter 代码
    lib/main.dart
    dart
    // Copyright 2023 The Flutter Authors. All rights reserved.
    // Use of this source code is governed by a BSD-style license that can be
    // found in the LICENSE file.
    
    import 'package:flutter/material.dart';
    import 'package:url_launcher/url_launcher.dart';
    
    void main() {
      runApp(const MyApp());
    }
    
    class MyApp extends StatelessWidget {
      const MyApp({super.key});
    
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'URL Launcher',
          theme: ThemeData(
            colorSchemeSeed: Colors.purple,
            brightness: Brightness.light,
          ),
          home: const MyHomePage(title: 'URL Launcher'),
        );
      }
    }
    
    class MyHomePage extends StatefulWidget {
      const MyHomePage({super.key, required this.title});
      final String title;
    
      @override
      State<MyHomePage> createState() => _MyHomePageState();
    }
    
    class _MyHomePageState extends State<MyHomePage> {
      Future<void>? _launched;
    
      Future<void> _launchInBrowser(Uri url) async {
        if (!await launchUrl(
          url,
          mode: LaunchMode.externalApplication,
        )) {
          throw Exception('Could not launch $url');
        }
      }
    
      Future<void> _launchInWebView(Uri url) async {
        if (!await launchUrl(
          url,
          mode: LaunchMode.inAppWebView,
        )) {
          throw Exception('Could not launch $url');
        }
      }
    
      Widget _launchStatus(BuildContext context, AsyncSnapshot<void> snapshot) {
        if (snapshot.hasError) {
          return Text('Error: ${snapshot.error}');
        } else {
          return const Text('');
        }
      }
    
      @override
      Widget build(BuildContext context) {
        final Uri toLaunch = Uri(
            scheme: 'https',
            host: 'docs.flutter.dev',
            path: 'testing/native-debugging');
        return Scaffold(
          appBar: AppBar(
            title: Text(widget.title),
          ),
          body: Center(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                Padding(
                  padding: const EdgeInsets.all(16),
                  child: Text(toLaunch.toString()),
                ),
                FilledButton(
                  onPressed: () => setState(() {
                    _launched = _launchInBrowser(toLaunch);
                  }),
                  child: const Text('Launch in browser'),
                ),
                const Padding(padding: EdgeInsets.all(16)),
                FilledButton(
                  onPressed: () => setState(() {
                    _launched = _launchInWebView(toLaunch);
                  }),
                  child: const Text('Launch in app'),
                ),
                const Padding(padding: EdgeInsets.all(16.0)),
                FutureBuilder<void>(future: _launched, builder: _launchStatus),
              ],
            ),
          ),
        );
      }
    }
    
  3. 要将 url_launcher 软件包添加为依赖项,请运行 flutter pub add

    flutter pub add url_launcher
    
    Resolving dependencies...
      collection 1.17.1 (1.17.2 available)
    + flutter_web_plugins 0.0.0 from sdk flutter
      matcher 0.12.15 (0.12.16 available)
      material_color_utilities 0.2.0 (0.8.0 available)
    + plugin_platform_interface 2.1.4
      source_span 1.9.1 (1.10.0 available)
      stream_channel 2.1.1 (2.1.2 available)
      test_api 0.5.1 (0.6.1 available)
    + url_launcher 6.1.11
    + url_launcher_android 6.0.36
    + url_launcher_ios 6.1.4
    + url_launcher_linux 3.0.5
    + url_launcher_macos 3.0.5
    + url_launcher_platform_interface 2.1.3
    + url_launcher_web 2.0.17
    + url_launcher_windows 3.0.6
    Changed 10 dependencies!
    
  4. 检查代码库发生了什么变化

    1. 在 Linux 或 macOS 上,运行此 find 命令。

      find ./ -mmin -120
      
      ./ios/Flutter/Debug.xcconfig
      ./ios/Flutter/Release.xcconfig
      ./linux/flutter/generated_plugin_registrant.cc
      ./linux/flutter/generated_plugins.cmake
      ./macos/Flutter/Flutter-Debug.xcconfig
      ./macos/Flutter/Flutter-Release.xcconfig
      ./macos/Flutter/GeneratedPluginRegistrant.swift
      ./pubspec.lock
      ./pubspec.yaml
      ./windows/flutter/generated_plugin_registrant.cc
      ./windows/flutter/generated_plugins.cmake
      
    2. 在 Windows 上,在命令提示符中运行此命令。

      Get-ChildItem C:\dev\example\ -Rescurse | Where-Object {$_.LastWriteTime -gt (Get-Date).AddDays(-1)}
      
      C:\dev\example\ios\Flutter\
      
      
      Mode                LastWriteTime         Length Name
      ----                -------------         ------ ----
                      8/1/2025   9:15 AM                Debug.xcconfig
                      8/1/2025   9:15 AM                Release.xcconfig
      
      C:\dev\example\linux\flutter\
      
      
      Mode                LastWriteTime         Length Name
      ----                -------------         ------ ----
                      8/1/2025   9:15 AM                generated_plugin_registrant.cc
                      8/1/2025   9:15 AM                generated_plugins.cmake
      
      C:\dev\example\macos\Flutter\
      
      
      Mode                LastWriteTime         Length Name
      ----                -------------         ------ ----
                      8/1/2025   9:15 AM                Flutter-Debug.xcconfig
                      8/1/2025   9:15 AM                Flutter-Release.xcconfig
                      8/1/2025   9:15 AM                GeneratedPluginRegistrant.swift
      
      C:\dev\example\
      
      
      Mode                LastWriteTime         Length Name
      ----                -------------         ------ ----
                      8/1/2025   9:15 AM                pubspec.lock
                      8/1/2025   9:15 AM                pubspec.yaml
      
      C:\dev\example\windows\flutter\
      
      
      Mode                LastWriteTime         Length Name
      ----                -------------         ------ ----
                      8/1/2025   9:15 AM                generated_plugin_registrant.cc
                      8/1/2025   9:15 AM                generated_plugins.cmake
      

安装 url_launcher 会在 Flutter 应用目录中为所有目标平台添加配置文件和代码文件。

同时调试 Dart 和原生语言代码

#

本节介绍如何调试 Flutter 应用中的 Dart 代码,以及如何使用其常规调试器调试任何原生代码。此功能使你在编辑原生代码时能够利用 Flutter 的热重载。

使用 Android Studio 调试 Dart 和 Android 代码

#

要调试原生 Android 代码,你需要一个包含 Android 代码的 Flutter 应用。在本节中,你将学习如何将 Dart、Java 和 Kotlin 调试器连接到你的应用。你不需要为了同时调试 Dart 和 Android 代码而必须使用 VS Code。本指南包含 VS Code 说明,以保持与 Xcode 和 Visual Studio 指南的一致性。

本节使用 更新测试 Flutter 应用 中创建的同一个 Flutter url_launcher 示例应用。

在终端中构建 Flutter 应用的 Android 版本

#

要生成所需的 Android 平台依赖项,请运行 flutter build 命令。

flutter build appbundle --debug
Running Gradle task 'bundleDebug'...                               27.1s
✓ Built build/app/outputs/bundle/debug/app-debug.aab.

首先使用 VS Code 开始调试

#

如果你使用 VS Code 调试大部分代码,请从本节开始。

  1. 要打开 Flutter 应用目录,请前往 **文件 (File)** > **打开文件夹... (Open Folder...)** 并选择 my_app 目录。

  2. 打开 lib/main.dart 文件。

  3. 如果你可以为多个设备构建应用,则必须先选择设备。

    前往 **视图 (View)** > **命令面板... (Command Palette...)**

    你也可以按 Ctrl / Cmd + Shift + P

  4. 输入 flutter select

  5. 点击 **Flutter: 选择设备 (Flutter: Select Device)** 命令。

  6. 选择你的目标设备。

  7. 点击调试图标(用于触发 Flutter 应用调试模式的 VS Code 虫子图标)。这会打开 **调试** 窗格并启动应用。等待应用在设备上启动,并等待调试窗格显示 **已连接 (Connected)**。首次启动调试器时耗时较长。后续启动速度会更快。

    此 Flutter 应用包含两个按钮

    • 在浏览器中启动 (Launch in browser):此按钮会在设备的默认浏览器中打开此页面。
    • 在应用中启动 (Launch in app):此按钮会在你的应用内打开此页面。此按钮仅适用于 iOS 或 Android。桌面应用会启动浏览器。

在 Android Studio 中附加到 Flutter 进程

#
  1. 点击 **将调试器附加到 Android 进程 (Attach debugger to Android process)** 按钮。(带有浅灰色箭头的微小绿色虫子

    :::tip 如果此按钮未出现在 **Projects** 菜单栏中,请确认你打开的是 Flutter 应用程序项目,而非 Flutter 插件。 ::

  2. **进程 (process)** 对话框会为每个已连接的设备显示一个条目。选择 **显示所有进程 (show all processes)** 以显示每个设备上可用的进程。

  3. 选择你想要附加到的进程。在本指南中,选择使用 **Emulator Pixel_5_API_33** 的 com.example.my_app 进程。

  4. 在 **调试 (Debug)** 窗格中找到 **Android 调试器 (Android Debugger)** 标签页。

  5. 在 **项目 (Project)** 窗格中,依次展开 **my_app_android** > **android** > **app** > **src** > **main** > **java** > **io.flutter plugins**。

  6. 双击 **GeneratedProjectRegistrant** 以在 **编辑 (Edit)** 窗格中打开 Java 代码。

在本过程结束时,Dart 和 Android 调试器将与同一个进程交互。使用其中任意一个或同时使用两个来设置断点、检查堆栈、恢复执行等。换句话说,开始调试吧!

首先使用 Android Studio 开始调试

#

如果你使用 Android Studio 调试大部分代码,请从本节开始。

  1. 要打开 Flutter 应用目录,请前往 **文件 (File)** > **打开... (Open...)** 并选择 my_app 目录。

  2. 打开 lib/main.dart 文件。

  3. 选择一个虚拟 Android 设备。前往工具栏,打开最左侧的下拉菜单,点击 **打开 Android 模拟器: <设备> (Open Android Emulator: <device>)**。

    你可以选择任何未包含 arm64 的已安装模拟器。

  4. 从同一菜单中,选择该虚拟 Android 设备。

  5. 在工具栏中,点击 **运行 'main.dart' (Run 'main.dart')**。

    你也可以按 Ctrl + Shift + R

    应用在模拟器中显示后,继续下一步。

  6. 点击 **将调试器附加到 Android 进程 (Attach debugger to Android process)** 按钮。(带有浅灰色箭头的微小绿色虫子

    :::tip 如果此按钮未出现在 **Projects** 菜单栏中,请确认你打开的是 Flutter 应用程序项目,而非 Flutter 插件。 ::

  7. **进程 (process)** 对话框会为每个已连接的设备显示一个条目。选择 **显示所有进程 (show all processes)** 以显示每个设备上可用的进程。

  8. 选择你想要附加到的进程。在本指南中,选择使用 **Emulator Pixel_5_API_33** 的 com.example.my_app 进程。

  9. 在 **调试 (Debug)** 窗格中找到 **Android 调试器 (Android Debugger)** 标签页。

  10. 在 **项目 (Project)** 窗格中,依次展开 **my_app_android** > **android** > **app** > **src** > **main** > **java** > **io.flutter plugins**。

  11. 双击 **GeneratedProjectRegistrant** 以在 **编辑 (Edit)** 窗格中打开 Java 代码。

在本过程结束时,Dart 和 Android 调试器将与同一个进程交互。使用其中任意一个或同时使用两个来设置断点、检查堆栈、恢复执行等。换句话说,开始调试吧!

使用 Xcode 调试 Dart 和 iOS 代码

#

要调试 iOS 代码,你需要一个包含 iOS 代码的 Flutter 应用。在本节中,你将学习如何将两个调试器连接到你的应用:通过 VS Code 的 Flutter 和 Xcode。你需要同时运行 VS Code 和 Xcode。

本节使用 更新测试 Flutter 应用 中创建的同一个 Flutter url_launcher 示例应用。

在终端中构建 Flutter 应用的 iOS 版本

#

要生成所需的 iOS 平台依赖项,请运行 flutter build 命令。

flutter build ios --config-only --no-codesign --debug
Warning: Building for device with codesigning disabled. You will have to manually codesign before deploying to device.
Building com.example.myApp for device (ios)...

首先使用 VS Code 开始调试

#

如果你使用 VS Code 调试大部分代码,请从本节开始。

在 VS Code 中启动 Dart 调试器
#
  1. 要打开 Flutter 应用目录,请前往 **文件 (File)** > **打开文件夹... (Open Folder...)** 并选择 my_app 目录。

  2. 打开 lib/main.dart 文件。

  3. 如果你可以为多个设备构建应用,则必须先选择设备。

    前往 **视图 (View)** > **命令面板... (Command Palette...)**

    你也可以按 Ctrl / Cmd + Shift + P

  4. 输入 flutter select

  5. 点击 **Flutter: 选择设备 (Flutter: Select Device)** 命令。

  6. 选择你的目标设备。

  7. 点击调试图标(用于触发 Flutter 应用调试模式的 VS Code 虫子图标)。这会打开 **调试** 窗格并启动应用。等待应用在设备上启动,并等待调试窗格显示 **已连接 (Connected)**。首次启动调试器时耗时较长。后续启动速度会更快。

    此 Flutter 应用包含两个按钮

    • 在浏览器中启动 (Launch in browser):此按钮会在设备的默认浏览器中打开此页面。
    • 在应用中启动 (Launch in app):此按钮会在你的应用内打开此页面。此按钮仅适用于 iOS 或 Android。桌面应用会启动浏览器。
在 Xcode 中附加到 Flutter 进程
#

要在 Xcode 中附加到 Flutter 应用

  1. 前往 **调试 (Debug)** > **附加到进程 (Attach to Process)**。

  2. 选择 **Runner**。它应该位于 **附加到进程** 菜单的 **可能的目标 (Likely Targets)** 标题下方的顶部。

首先使用 Xcode 开始调试

#

如果你使用 Xcode 调试大部分代码,请从本节开始。

启动 Xcode 调试器
#
  1. 从你的 Flutter 应用目录打开 ios/Runner.xcworkspace

  2. 使用工具栏中的 **方案 (Scheme)** 菜单选择正确的设备。

    如果没有特别偏好,请选择 **iPhone Pro 14**。

  3. 在 Xcode 中将此 Runner 作为普通应用运行。

    当运行完成时,Xcode 底部的 **调试 (Debug)** 区域会显示一条包含 Dart VM 服务 URI 的消息。它类似于以下响应

    2023-07-12 14:55:39.966191-0500 Runner[58361:53017145]
        flutter: The Dart VM service is listening on
        http://127.0.0.1:50642/00wEOvfyff8=/
    
  4. 复制 Dart VM 服务 URI。

在 VS Code 中附加到 Dart VM
#
  1. 要打开命令面板,请前往 **视图 (View)** > **命令面板... (Command Palette...)**

    你也可以按 Cmd + Shift + P

  2. 输入 debug

  3. 点击 **调试: 附加到设备上的 Flutter (Debug: Attach to Flutter on Device)** 命令。

  4. 在 **粘贴 VM 服务 URI (Paste an VM Service URI)** 框中,粘贴你从 Xcode 复制的 URI 并按 Enter

使用 Xcode 调试 Dart 和 macOS 代码

#

要调试 macOS 代码,你需要一个包含 macOS 代码的 Flutter 应用。在本节中,你将学习如何将两个调试器连接到你的应用:通过 VS Code 的 Flutter 和 Xcode。你需要同时运行 VS Code 和 Xcode。

本节使用 更新测试 Flutter 应用 中创建的同一个 Flutter url_launcher 示例应用。

在终端中构建 Flutter 应用的 macOS 版本

#

要生成所需的 macOS 平台依赖项,请运行 flutter build 命令。

flutter build macos --debug
Building macOS application...

首先使用 VS Code 开始调试

#
在 VS Code 中启动调试器
#
  1. 要打开 Flutter 应用目录,请前往 **文件 (File)** > **打开文件夹... (Open Folder...)** 并选择 my_app 目录。

  2. 打开 lib/main.dart 文件。

  3. 如果你可以为多个设备构建应用,则必须先选择设备。

    前往 **视图 (View)** > **命令面板... (Command Palette...)**

    你也可以按 Ctrl / Cmd + Shift + P

  4. 输入 flutter select

  5. 点击 **Flutter: 选择设备 (Flutter: Select Device)** 命令。

  6. 选择你的目标设备。

  7. 点击调试图标(用于触发 Flutter 应用调试模式的 VS Code 虫子图标)。这会打开 **调试** 窗格并启动应用。等待应用在设备上启动,并等待调试窗格显示 **已连接 (Connected)**。首次启动调试器时耗时较长。后续启动速度会更快。

    此 Flutter 应用包含两个按钮

    • 在浏览器中启动 (Launch in browser):此按钮会在设备的默认浏览器中打开此页面。
    • 在应用中启动 (Launch in app):此按钮会在你的应用内打开此页面。此按钮仅适用于 iOS 或 Android。桌面应用会启动浏览器。
在 Xcode 中附加到 Flutter 进程
#
  1. 要附加到 Flutter 应用,请前往 **调试 (Debug)** > **附加到进程 (Attach to Process)** > **Runner**。

    **Runner** 应该位于 **附加到进程** 菜单的 **可能的目标 (Likely Targets)** 标题下方的顶部。

首先使用 Xcode 开始调试

#
在 Xcode 中启动调试器
#
  1. 从你的 Flutter 应用目录打开 macos/Runner.xcworkspace

  2. 在 Xcode 中将此 Runner 作为普通应用运行。

    当运行完成时,Xcode 底部的 **调试 (Debug)** 区域会显示一条包含 Dart VM 服务 URI 的消息。它类似于以下响应

    2023-07-12 14:55:39.966191-0500 Runner[58361:53017145]
        flutter: The Dart VM service is listening on
        http://127.0.0.1:50642/00wEOvfyff8=/
    
  3. 复制 Dart VM 服务 URI。

在 VS Code 中附加到 Dart VM
#
  1. 要打开命令面板,请前往 **视图 (View)** > **命令面板... (Command Palette...)**

    你也可以按 Cmd + Shift + P

  2. 输入 debug

  3. 点击 **调试: 附加到设备上的 Flutter (Debug: Attach to Flutter on Device)** 命令。

  4. 在 **粘贴 VM 服务 URI (Paste an VM Service URI)** 框中,粘贴你从 Xcode 复制的 URI 并按 Enter

使用 Visual Studio 调试 Dart 和 C++ 代码

#

要调试 C++ 代码,你需要一个包含 C++ 代码的 Flutter 应用。在本节中,你将学习如何将两个调试器连接到你的应用:通过 VS Code 的 Flutter 和 Visual Studio。你需要同时运行 VS Code 和 Visual Studio。

本节使用 更新测试 Flutter 应用 中创建的同一个 Flutter url_launcher 示例应用。

在 PowerShell 或命令提示符中构建 Flutter 应用的 Windows 版本

#

要生成所需的 Windows 平台依赖项,请运行 flutter build 命令。

C:\> flutter build windows --debug
Building Windows application...                                    31.4s
√  Built build\windows\runner\Debug\my_app.exe.

首先使用 VS Code 开始调试

#

如果你使用 VS Code 调试大部分代码,请从本节开始。

在 VS Code 中启动调试器
#
  1. 要打开 Flutter 应用目录,请前往 **文件 (File)** > **打开文件夹... (Open Folder...)** 并选择 my_app 目录。

  2. 打开 lib/main.dart 文件。

  3. 如果你可以为多个设备构建应用,则必须先选择设备。

    前往 **视图 (View)** > **命令面板... (Command Palette...)**

    你也可以按 Ctrl / Cmd + Shift + P

  4. 输入 flutter select

  5. 点击 **Flutter: 选择设备 (Flutter: Select Device)** 命令。

  6. 选择你的目标设备。

  7. 点击调试图标(用于触发 Flutter 应用调试模式的 VS Code 虫子图标)。这会打开 **调试** 窗格并启动应用。等待应用在设备上启动,并等待调试窗格显示 **已连接 (Connected)**。首次启动调试器时耗时较长。后续启动速度会更快。

    此 Flutter 应用包含两个按钮

    • 在浏览器中启动 (Launch in browser):此按钮会在设备的默认浏览器中打开此页面。
    • 在应用中启动 (Launch in app):此按钮会在你的应用内打开此页面。此按钮仅适用于 iOS 或 Android。桌面应用会启动浏览器。
在 Visual Studio 中附加到 Flutter 进程
#
  1. 要打开项目解决方案文件,请前往 **文件 (File)** > **打开 (Open)** > **项目/解决方案... (Project/Solution…)**

    你也可以按 Ctrl + Shift + O

  2. 选择你的 Flutter 应用目录中的 build/windows/my_app.sln 文件。

  3. 前往 **调试 (Debug)** > **附加到进程 (Attach to Process)**。

    你也可以按 Ctrl + Alt + P

  4. 从 **附加到进程** 对话框中,选择 my_app.exe

    Visual Studio 开始监控该 Flutter 应用。

首先使用 Visual Studio 开始调试

#

如果你使用 Visual Studio 调试大部分代码,请从本节开始。

启动本地 Windows 调试器
#
  1. 要打开项目解决方案文件,请前往 **文件 (File)** > **打开 (Open)** > **项目/解决方案... (Project/Solution…)**

    你也可以按 Ctrl + Shift + O

  2. 选择你的 Flutter 应用目录中的 build/windows/my_app.sln 文件。

  3. my_app 设置为启动项目。在 **解决方案资源管理器 (Solution Explorer)** 中,右键点击 my_app 并选择 **设为启动项目 (Set as Startup Project)**。

  4. 点击 **本地 Windows 调试器 (Local Windows Debugger)** 开始调试。

    你也可以按 F5

    当 Flutter 应用启动后,控制台窗口会显示一条包含 Dart VM 服务 URI 的消息。它类似于以下响应

    flutter: The Dart VM service is listening on http://127.0.0.1:62080/KPHEj2qPD1E=/
    
  5. 复制 Dart VM 服务 URI。

在 VS Code 中附加到 Dart VM
#
  1. 要打开命令面板,请前往 **视图 (View)** > **命令面板... (Command Palette...)**

    你也可以按 Cmd + Shift + P

  2. 输入 debug

  3. 点击 **调试: 附加到设备上的 Flutter (Debug: Attach to Flutter on Device)** 命令。

  4. 在 **粘贴 VM 服务 URI (Paste an VM Service URI)** 框中,粘贴你从 Visual Studio 复制的 URI 并按 Enter

资源

#

查看以下关于调试 Flutter、iOS、Android、macOS 和 Windows 的资源

Flutter

#

Android

#

你可以在 developer.android.com 上找到以下调试资源。

iOS 和 macOS

#

你可以在 developer.apple.com 上找到以下调试资源。

Windows

#

你可以在 Microsoft Learn 上找到调试资源。