跳到主內容

使用原生語言偵錯程式

如何將原生偵錯程式連線到正在執行的 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.flutter.club.tw/
    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 上找到除錯資源。