【鸿蒙开发】第三十八章 ArkTS代码调试

  • debug启动调试
  • attach启动调试
  • 等待调试
  • 使用断点
  • 检查变量
  • 使用调试器
  • 反向调试
  • extension调试
  • worker/taskpool调试
  • Evaluate and log
  • Smart Step Into

1 debug启动调试

  1. 如果需要设置断点调试,找到需要暂停的代码片断,点击该代码行的左侧边线,或将光标置于该行上并按Ctrl + F8(macOS为Command+F8)。如果无法添加断点,请查看FAQ调试过程中无法添加断点。

    设置断点后,调试能够在正确的断点处中断,并高亮显示该行。

  2. 在设备选择框中,选择调试的设备。

  3. 选择启动调试的Configuration,在模块选择框中选择需要调试的模块。也可以通过Edit Configurations配置调试参数。

  4. 在工具栏中,单击Debug

    或者在工具栏中Run中选择Debug。

  5. 启动调试后,开发者可以通过调试器进行代码调试。

    如有断点会在断点处高亮,并展示当前断点处的Frames和Variables。

2 attach启动调试

Attach Debugger和Debug的区别在于,Attach Debugger to Process可以先运行应用/元服务,然后再启动调试,或者直接启动设备上已安装的应用/元服务进行调试;而Debug是直接运行应用/元服务后立即启动调试。

前提条件

当前设备上被attach的应用代码和本地代码一致,且已提前进行构建生成必要的sourcemap文件。

使用约束

attach不支持的场景:

  • 本地无源码。
  • bundleName不匹配,将出现提示“The selected process does not match the bundlename of the current project!”,但不阻塞调试过程。

操作步骤

  1. 在工具栏中,选择调试的设备,并单击Attach Debugger to Process启动调试。

  2. 选择要调试的设备及应用进程,若应用bundlename与当前工程不一致,则需勾选Show all process。

  3. 选择需要使用的调试配置,或者使用默认配置。

  4. 选择需要调试的Debug type,若选择已创建的Run/Debug configuration进行attach调试,此时Debug type不可改变,只可在Run/Debug configuration界面修改。

  5. 点击OK开始attach调试。

3 等待调试

说明

  • 应用设置为“等待调试模式”后,此时如果启动普通的debug调试,将会取消当前的等待调试模式。
  • 设置“等待调试模式”之前,需要先把应用安装到设备上。

操作步骤

  1. 在设备选择框中选择调试的设备,并单击Run > Attach to Process by Name

  2. 选择需要设置为“等待调试模式”的应用(默认为当前工程),选择需要进行调试的调试类型。然后单击Attach,即可将该应用设置为“等待调试模式”。

    此时会在DevEco Studio底部显示一个等待进度条,在应用被拉起之前,将一直处于等待状态。可通过进度条右侧的取消按钮进行取消。

  3. 拉起设备端应用,此时将会进入调试。

 4 使用断点

DevEco Studio ArkTS支持行断点和异常断点,这些断点可以触发不同的操作。

行断点

行断点是最常见的类型,用于在指定的代码行暂停应用的执行,在暂停时,您可以检查变量,对表达式求值,然后逐行执行,以确定运行时错误的原因。

异常断点

异常断点会在应用执行时发生异常的地方暂停应用。

行断点

如需添加行断点,请按以下步骤操作:

  1. 找到您要暂停执行的代码行。
  2. 点击该代码行的左侧边线,或将光标置于该行上并按Ctrl + F8(macOS为Command+F8)。

    当您设置断点时,相应的代码行旁边会出现一个红点,如图。

    在设置的断点红点处,单击鼠标右键,在Condition中可以设置条件断点,此类断点仅会在满足特定条件时才会暂停应用。

  3. 点击Debug图标,开始调试。如果您的应用已经在运行,请点击Attach Debugger to Process图标

    当应用运行到代码处,会在代码处停住,并高亮显示。

异常断点

在BreakPoints中,勾选ArkTS/Js Exception Breakpoints,开启异常断点。

当调试应用程序中出现异常时,会在异常处高亮,并且代码左侧有标志,并展示当前Frames和Variable,以及错误信息。

断点管理

在设置的程序断点红点处,单击鼠标右键。然后单击More或按快捷键Ctrl+Shift+F8(macOS为Shift+Command+F8),可以管理断点。

或者在点击“Debug”窗口中点击View Breakpoints 图标

5 检查变量

当应用停止在某个断点处时,您可以在"Debugger"窗中查看当前的变量信息。当您在"Frame"窗格中择某个帧之后,您可以在"Variable"窗格中检查变量。此外您还可以通过对变量进行计算。

如需向"Watches"列表中添加变量或表达式,请按以下步骤操作:在"Watches"空格中输入表达式,然后点击Add to Watches 图标

如需从"Watches"列表中移除某一项,点击鼠标右键,选择Remove Watches。

 6 使用调试器

调试窗口

Debug界面有两个tab页,分别是“entry”和“entry(PandaDebugger)”。

通常第一个tab页“entry”用于展示推包安装过程。

第二个tab页“entry(PandaDebugger)”是调试器,用于调试Debugger功能。

  • Debugger窗格

    Debugger显示两个独立的窗格:

    1. Frames:当应用暂停时,Frames区会显示当前代码所引用的代码位置。
    2. Variables:展示当前变量。

    Debugger窗格有多个按钮: 
    表1 调试器按钮

    按钮

    名称

    快捷键

    功能

    Resume Program

    F9(macOS为Option+Command+R

    当程序执行到断点时停止执行,单击此按钮程序继续执行。

    Step Over

    F8(macOS为F8

    在单步调试时,直接前进到下一行(如果在函数中存在子函数时,不会进入子函数内单步执行,而是将整个子函数当作一步执行)。

    Step Into

    F7(macOS为F7

    在单步调试时,遇到子函数后,进入子函数并继续单步执行。

    Force Step Into

    Alt+Shift+F7(macOS为Option+Shift+F7

    在单步调试时,强制进入方法。

    Step Out

    Shift+F8(macOS为Shift+F8

    在单步调试执行到子函数内时,单击Step Out会执行完子函数剩余部分,并跳出返回到上一层函数。

    Stop

    Ctrl+F2(macOS为Command+F2

    停止调试任务。

    Run To Cursor

    Alt+F9(macOS为Option+F9

    断点执行到鼠标停留处。

    • 点击Resume Program图标,如果存在断点时,命中下一个断点,并展示对应的Frames和Variables信息;如果不存在断点,设备上的应用正常运行,Frames和Variables信息会消失。

    • 点击Pause Program图标,当有对应源代码时,应用会暂停。
    • 点击Step Over当前代码位置执行到下一行代码。

    • 点击Step Into,当前代码进入到方法内部。

      代码进入add方法的定义处。

    • 点击Step Out,代码会从方法内部回到调用处。

    • 点击Run to Cursor,代码停留在鼠标停留处。

  • Console窗格

    用于展示已加载的ets/js。

7 反向调试

DevEco Studio提供了反向调试的能力,供开发者进行调用栈回退,当前仅支持ArkTS调试模式。

程序中断时,在调用栈窗口右键单击,选择Restart Frame,可以回退到上一个调用栈。

8 extension调试

等待调试方式

  1. 参考等待调试对当前调试工程进行调试。

  2. 在Extension Ability生命周期内设置断点。

  3. 等待Extension Ability生命周期函数代码调用从而命中断点。

修改运行配置方式

  1. 在运行调试窗口,运行配置项Launch Options选择Specified Ability

  2. 选择需要进行调试的Extension Ability。

  3. 点击OK保存配置后,点击调试按钮,启动调试即可命中 Extension Ability 中的生命周期函数断点。

9 worker/taskpool调试

worker 调试

  1. 右键模块的 ets 目录新建一个 worker 文件。

  2. 开发者写完代码后,在 worker 文件中设置断点。

  3. 启动调试,当断点命中时,调试窗口会新启动一个调试会话,显示 worker 线程的堆栈信息。

taskpool 调试

  1. 编写一个 taskpool 代码,在代码中设置断点。

  2. 启动调试,当代码中断点命中时,调试窗口会新启动一个调试会话,显示 taskpool 线程的堆栈信息。

10 Evaluate and log

操作步骤

  1. 在需要打印表达式结果的地方设置断点。

  2. 右键断点,然后点击More按钮。

  3. 勾选Evaluate and log复选框,并在下方输入框输入要打印的表达式。

  4. 启动调试,使断点命中,切换到调试的 Console 窗口,表达式的打印结果将在这里展示。

 11 Smart Step Into

智能步入

  1. 启动调试,如果断点所在的一行内存在多个方法调用,可以通过点击调试窗口的按钮或快捷键Shift + F7高亮展示可进入函数。

  2. 点击其中一个函数即可步入。

过滤脚本文件

  1. 点击File > Settings > Build, Execution, Deployment > Debugger > Stepping,勾选Do not step into ArkTs scripts, 可在调试时禁止智能步入某些脚本。使用工具栏按钮管理要跳过的脚本列表。

  2. 单击 按钮可添加新的脚本过滤器。在打开的对话框中,输入要跳过的文件名称或使用通配符。例如,如果要始终跳过 JavaScript文件,请输入 *.js。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/20868.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

个人简历html网页模板,科技感炫酷html简历模板

炫酷动效登录页 引言 在网页设计中,按钮是用户交互的重要元素之一。这样一款黑色个人简历html网页模板,科技感炫酷html简历模板,设计效果类似科技看板图,可帮您展示技能、任职经历、作品等,喜欢这种风格的小伙伴不要犹豫哦。该素材呈现了数据符号排版显示出人形的动画效…

Python深度学习环境配置(Pytorch、CUDA、cuDNN),包括Anaconda搭配Pycharm的环境搭建以及基础使用教程(保姆级教程,适合小白、深度学习零基础入门)

全流程导览 一、前言二、基本介绍2.1全过程软件基本介绍2.1.1 Pytorch2.1.2 Anaconda2.1.3 Pycharm2.1.4 显卡GPU及其相关概念2.1.5 CUDA和cuDNN 2.2 各部分相互间的联系和安装逻辑关系 三、Anaconda安装3.1安装Anaconda3.2配置环境变量3.3检验是否安装成功 四、Pycharm安装五、…

案例-18.文件上传-阿里云OSS-集成

一.分析 要想将阿里云oss集成到新增员工的功能中,必须要设计文件上传的接口UploadController。首先前端给接口上传接口需要接收请求的图片,然后接口再将图片上传到阿里云oss中存储起来,接着接口从阿里云oss中获取图片的url并返回给前端&#…

在Unity中用简单工厂模式模拟原神中的元素反应

1. 第一步创建3个脚本Factory(反应工厂),Reactions(具体反应),FactoryText(测试反应的脚本) 2.编写工厂脚本 using UnityEngine;// 定义一个元素反应的接口,所有具体的元…

Markdown 常用语法及示例

介绍 Markdown 是一种轻量级标记语言,广泛用于编写文档、README 文件、博客文章等。本文将介绍 Markdown 的一些常用语法,帮助你快速上手。官网地址1 1. 标题 Markdown 使用井号 # 来表示标题,井号的数量决定了标题的级别,最多…

Ubuntu USB耳机找不到设备解决

​ 一. 确定硬件连接 lsusb -t 插拔USB耳机,确定是否有USB识别到 二. 查看输出设备 sudo apt-get install pavucontrol pavucontrol 点击想要使用的输出设备后面的绿色选项 三. 输出设备没有USB耳机时调试 3.1 确认ALSA是否识别设备 列出ALSA播放设备&#…

企业软件合规性管理:构建高效、安全的软件资产生态

引言 在数字化转型的浪潮下,企业的软件使用方式日益多元化,涉及云端、订阅制、永久授权及浮动许可等多种模式。然而,随着软件资产的增多,企业面临着合规性管理的严峻挑战:非法软件使用、许可证管理不当、软件资产闲置…

el-table树状表格,默认展开第一个节点的每一层

效果如图 <template><el-table:data"tableData"style"width: 100%":tree-props"{ children: children, hasChildren: hasChildren }":expand-row-keys"expandRowKeys"row-key"id"expand-change"handleExpan…

C ASCII字符表示

1-1 ASCII字符表示 sprintf(buf, "A5%c%02d", SOFTWARE_VERSRION_1 A - 1, (U16)SOFTWARE_VERSRION_4); 在程序中通常会出现这样的写法&#xff0c;A对应的ASCII字符表示的含义是65&#xff0c;一直往后到95获得的支付是B是66&#xff0c;然后Z对应的是90&#xff…

【iOS】包大小和性能稳定性优化

包大小优化 图片 LSUnusedResources 扫描重复的图片 ImageOptim,压缩图片 压缩文件 优化音视频资源 &#xff0c;使用MP3 代替 WAV ffmpeg -i input.mp3 -b:a 128k output.mp3 视频 H.265&#xff08;HEVC&#xff09; 代替 H.264 ffmpeg ffmpeg -i input.mp4 -vcodec lib…

智能选路+NAT实验

智能选路NAT实验 1.拓扑 2.配置 1.配IP&#xff08;按图配&#xff0c;略&#xff09; 2.配真实DNS服务器 3.虚拟服务器 4.配置DNS透明代理功能 [USG6000V1]dns-transparent-policy [USG6000V1-policy-dns]dns t [USG6000V1-policy-dns]dns transparent-proxy en [USG6000…

【Linux网络-网络基础】TCP/IP五层(或四层)模型+网络传输的基本流程

一、TCP/IP五层&#xff08;或四层&#xff09;模型 TCP/IP 是一组协议的代名词&#xff0c;它还包括许多协议&#xff0c;组成了 TCP/IP 协议簇。 TCP/IP 通讯协议采用了 5 层的层级结构&#xff0c;每一层都呼叫它的下一层所提供的网络来完成自己的需求。 ❍ 物理层&#…

POI优化Excel录入

57000单词原始录入时间258S 核心代码: List<Word> wordBookList ExcelUtil.getReader(file.getInputStream()).readAll(Word.class);if (!CollectionUtil.isEmpty(wordBookList)) {for (Word word : wordBookList) {//逐条向数据库中插入单词wordMapper.insert(word);}…

Solon —— 容器

说明 Solon 的核心概念有 IoC、AOP 和本地事件总线。有人常常有误解以为 IoC 和 AOP 是 Spring 提出的&#xff0c;其实这两种思想在Spring 之前就已经有了&#xff0c;但 Spring 把这两个思想在技术上落地和推广做得很好&#xff0c;让 Ioc 和 AOP 广为人知。 核心概念 IoC…

java每日精进 2.13 MySql迁移人大金仓

1.迁移数据库 1. 数据库创建语句 MySQL&#xff1a; CREATE DATABASE dbname; 人大金仓&#xff08;Kingbase&#xff09;&#xff1a; 在人大金仓中&#xff0c;CREATE DATABASE 的语法通常相同&#xff0c;但可能需要特别注意字符集的指定&#xff08;如果涉及到多语言支持…

《DeepSeek 一站式工作生活 AI 助手》

最近国产AI工具DeepSeek在全球火出圈&#xff0c;登顶多个国家应用商店&#xff0c;下载量一路飙升。这匹AI “黑马” 到底凭什么征服全球用户&#xff1f;让我们全方位解锁DeepSeek——从基础入门到高阶玩法&#xff0c;从实用技巧到隐藏功能。 DeepSeek是一款功能强大的国产A…

php-fpm

摘要 php-fpm(fastcgi process manager)是PHP 的FastCGI管理器&#xff0c;管理PHP的FastCGI进程&#xff0c;提升PHP应用的性能和稳定性 php-fpm是一个高性能的php FastCGI管理器&#xff0c;提供了更好的php进程管理方式&#xff0c;可以有效的控制内存和进程&#xff0c;支…

istio实现灰度发布,A/B发布, Kiali网格可视化(二)

代码发布是软件开发生命周期中的一个重要环节&#xff0c;确保新功能和修复能够顺利上线。以下是几种常见的代码发布流程。在学习灰度发布之前。我们首先回忆下代码发布常用的几种方法。 A/B&#xff08;蓝绿&#xff09;发布&#xff1a; 蓝绿部署是一种通过维护两套独立的环…

从零搭建微服务项目Base(第7章——微服务网关模块基础实现)

前言&#xff1a; 在前面6章的学习中已经完成了服务间的调用实现&#xff0c;即各微服务通过nacos或eureka服务器完成服务的注册&#xff0c;并从nacos中拉取配置实现热更新。当某个服务接口需要调用其他服务时&#xff0c;通过feign定义接口&#xff0c;并通过注解配置服务名…

【异常错误】pycharm debug view变量的时候显示不全,中间会以...显示

异常问题&#xff1a; 这个是在新版的pycharm中出现的&#xff0c;出现的问题&#xff0c;点击view后不全部显示&#xff0c;而是以...折叠显示 在setting中这么设置一下就好了&#xff1a; 解决办法&#xff1a; https://youtrack.jetbrains.com/issue/PY-75568/Large-stri…