百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术流 > 正文

Flutter实战经验(四):使用原生的调试器

citgpt 2024-08-10 15:17 10 浏览 0 评论

如果你只使用 Dart 语言开发 Flutter 应用,并且不使用特定于平台的的库或者功能,你可以使用 IDE 的调试器调试你的代码。只有这篇指南的第一部分「调试 Dart 代码」对你有用。

如果你正在开发特定于平台的的插件或者使用由 Swift,ObjectiveC,Java 或 Kotlin 语言编写的特定于平台的库,你可以使用 Xcode(用于 iOS)或者 Android Gradle(用于 Android)调试这部分代码。本文介绍如何将用于 Dart 和用于原生代码的 两个 调试器连接到你的 Dart 应用。

Flutter实战经验(四):使用原生的调试器

1. 调试 Dart 代码

你可以使用 IDE 进行一般的 Dart 调试。以下内容针对 Android Studio 进行说明,但你也可以使用你喜欢的安装并配置好 Flutter 和 Dart 插件的编辑器来进行调试。

小提示:

推荐连接到真机进行调试,而不是使用不支持 profie 构建模式的仿真器或模拟器。更多信息参考 :Flutter实战经验(三):构建模式的选择

1.1 Dart 调试器

  • 使用 Android Studio 打开你的项目。
  • 通过单击调试图标,同时打开调试面板并在控制台中运行应用。首次运行应用是最慢的,你会发现窗口底部的调试面板看起来会像这样:

你可以设置调试面板的显示位置,甚至可以用调试面板右侧的齿轮将其拆分到独立的窗口。对于 Android Studio 中的任何检查器都是如此。

  • 在 counter++ 这一行上添加断点。
  • 在应用里,点击 + 按钮(FloatingActionButton,或者简称 FAB)来增加数字。应用会暂停。
  • 以下截图显示:
  • 编辑面板中的断点。
  • 当在断点处暂停时,在调试面板中显示应用的状态。
  • this 变量展开并显示其值。
  • 你可以 step in/out/over Dart 语句、热重载和恢复执行应用、以及像使用其他调试器一样来使用 Dart 调试器。 5: Debug 按钮切换调试面板的显示。

    1.2 Flutter inspector

    Flutter 插件提供了另外两个可能给你提供帮助的功能。Flutter inspector 是一个用来可视化以及查看 Flutter widget 树的工具,并帮助你:

    • 了解现有布局
    • 诊断布局问题

    你可以使用 Android Studio 窗口右侧的垂直按钮切换检查器的显示。

    1.3 Flutter outline

    Flutter Outline 以可视形式显示构建方法。注意在构建方法上可能与 widget 树不同。你可以使用 Android Studio 窗口右侧的垂直按钮切换 outline 的显示。

    这篇指南剩下的部分介绍了如何搭建原生代码的调试环境。你应该可以想象到,对于 iOS 和

    Android 这个过程是不同的。

    小提示

    通过安装 Presentation Assistant 插件来成为 Android Studio 的专业用户。你可以打开 Preferences > Plugins > Browsing repositories… 并在搜索框中输入 Presen 来找到并安装这个插件。

    当你安装并重启 Android Studio 之后,通过使用以下功能这个插件可以帮助你成为一个专业用户:

    • 显示你执行的任何操作的名字和 Windows/Linux/Mac 的快捷键。
    • 允许你搜索并找到可用的操作、设置、文档等等。
    • 允许你切换首选项,打开视图或者执行操作。
    • 允许你设置键盘快捷键。(无法在 Mac 上运行此功能?)

    例如,尝试下这个:

    • 当焦点在编辑面板中时,输入 command-Shift-A(Mac)或者 shift-control-A(Windows 和 Linux)。该插件会同时显示「查找」面板并显示在所有三个平台上执行此操作的提示。

    Presentation assistant's Find panel

    Presentation assistant 的「查找」面板

    Presentation assistant's action hint for opening its Find panel on Mac, Windows and LinuxPresentation assistant 的在 Mac、Windows 和 Linux 上打开「查找」面板的操作提示。

  • 输入 attach 显示以下内容:
  • 更新之后,你可以输入 Flutter 或者 Dart 来查看是否有新的可用的操作。
  • 使用 Escape 隐藏 Presentation Assistant 的「查找」面板。

    2. 使用 Android Gradle 调试(Android)

    为了调试原生代码,你需要一个包含 Android 原生代码的应用。在本节中,你将学会如何连接两个调试器到你的应用:1)Dart 调试器,和 2)Android Gradle 调试器。

    • 创建一个基本的 Flutter 应用。
    • 替换 lib/main.dart 为来自 url_launcher 包的以下示例代码

    添加 url_launcher 依赖到 pubspec 文件,并执行 flutter pub get:

    点击调试按钮,来同时打开调试面板并启动应用。等待应用在设备上启动并在调试面板中显示 Connected。(第一次可能需要一分钟,但是之后的启动会变快。)

    应用包含两个按钮:

    1)Launch in browser 在你的手机默认浏览器中打开 flutter.io ,

    2)Launch in app 在你的应用中打开 flutter.io。

    • 点击 Attach debugger to Android process 按钮()

    小提示

    如果这个按钮没有显示在 Projects 菜单栏上,确定你正在使用的是 Flutter 项目而不是 Flutter 插件。

  • 从进程对话框中,你应该可以看到每一个设备的入口。选择 show all processes 来显示每个设备可用的进程。
  • 选择你想附加到的进程。在这个例子中是 Motorola Moto G 的 com.google.clickcount(或 com.company.app_name)进程。
  • 在调试面板中,你现在应该可以看到一个 Android Debugger 标签页。
  • 在项目面板,展开 app_name > android > app > src > main > java > io.flutter plugins。双击 GeneratedProjectRegistrant 在编辑面板中打开 Java 代码。
  • Dart 和原生调试器都在与同一个进程交互。使用其中一个或者同时使用两个来设置断点、检查堆栈、恢复运行…… 换句话说,调试!

    Dart 调试面板和 lib/main.dart 中的两个断点。

    相关推荐

    js中arguments详解

    一、简介了解arguments这个对象之前先来认识一下javascript的一些功能:其实Javascript并没有重载函数的功能,但是Arguments对象能够模拟重载。Javascrip中每个函数...

    firewall-cmd 常用命令

    目录firewalldzone说明firewallzone内容说明firewall-cmd常用参数firewall-cmd常用命令常用命令 回到顶部firewalldzone...

    epel-release 是什么

    EPEL-release(ExtraPackagesforEnterpriseLinux)是一个软件仓库,它为企业级Linux发行版(如CentOS、RHEL等)提供额外的软件包。以下是关于E...

    FullGC详解  什么是 JVM 的 GC
    FullGC详解 什么是 JVM 的 GC

    前言:背景:一、什么是JVM的GC?JVM(JavaVirtualMachine)。JVM是Java程序的虚拟机,是一种实现Java语言的解...

    2024-10-26 08:50 citgpt

    使用Spire.Doc组件利用模板导出Word文档
    • 使用Spire.Doc组件利用模板导出Word文档
    • 使用Spire.Doc组件利用模板导出Word文档
    • 使用Spire.Doc组件利用模板导出Word文档
    • 使用Spire.Doc组件利用模板导出Word文档
    跨域(CrossOrigin)

    1.介绍  1)跨域问题:跨域问题是在网络中,当一个网络的运行脚本(通常时JavaScript)试图访问另一个网络的资源时,如果这两个网络的端口、协议和域名不一致时就会出现跨域问题。    通俗讲...

    微服务架构和分布式架构的区别

    1、含义不同微服务架构:微服务架构风格是一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信采用轻量级通信机制(通常用HTTP资源API)。这些服务围绕业务能力构建并...

    深入理解与应用CSS clip-path 属性
    深入理解与应用CSS clip-path 属性

    clip-pathclip-path是什么clip-path 是一个CSS属性,允许开发者创建一个剪切区域,从而决定元素的哪些部分可见,哪些部分会被隐...

    2024-10-25 11:51 citgpt

    HCNP Routing&Switching之OSPF LSA类型(二)
    • HCNP Routing&Switching之OSPF LSA类型(二)
    • HCNP Routing&Switching之OSPF LSA类型(二)
    • HCNP Routing&Switching之OSPF LSA类型(二)
    • HCNP Routing&Switching之OSPF LSA类型(二)
    Redis和Memcached的区别详解
    • Redis和Memcached的区别详解
    • Redis和Memcached的区别详解
    • Redis和Memcached的区别详解
    • Redis和Memcached的区别详解
    Request.ServerVariables 大全

    Request.ServerVariables("Url")返回服务器地址Request.ServerVariables("Path_Info")客户端提供的路...

    python操作Kafka

    目录一、python操作kafka1.python使用kafka生产者2.python使用kafka消费者3.使用docker中的kafka二、python操作kafka细...

    Runtime.getRuntime().exec详解

    Runtime.getRuntime().exec详解概述Runtime.getRuntime().exec用于调用外部可执行程序或系统命令,并重定向外部程序的标准输入、标准输出和标准错误到缓冲池。...

    promise.all详解 promise.all是干什么的
    promise.all详解 promise.all是干什么的

    promise.all详解promise.all中所有的请求成功了,走.then(),在.then()中能得到一个数组,数组中是每个请求resolve抛出的结果...

    2024-10-24 16:21 citgpt

    Content-Length和Transfer-Encoding详解
    • Content-Length和Transfer-Encoding详解
    • Content-Length和Transfer-Encoding详解
    • Content-Length和Transfer-Encoding详解
    • Content-Length和Transfer-Encoding详解

    取消回复欢迎 发表评论: