---
title: 移动应用调试
date: 2020-08-05
categories:
  - app-development
  - mobile-development
  - mobiletogether
  - tools
tags:
  - app-development
  - mobile-app-debugging
  - mobile-development-tools
  - mobiletogether
description: 开发者需要使用移动应用调试工具来理解和解决应用程序的行为问题。MobileTogether 提供了全面的应用程序执行流程调试功能。
---
Status: #blog

Tags:  #app-development #mobile-app-debugging #mobile-development-tools #mobiletogether

Categories: [mobile-development](/blog/zh/category/mobile-development.md) 
# 移动应用调试

MobileTogether 是一款用于构建高度复杂、优雅且跨平台的解决方案的工具。开发人员需要移动应用程序调试工具，以便在开发过程中进行故障排除，并了解应用程序的行为。MobileTogether Designer 提供了全面的应用程序执行流程调试功能，可以在动作树内部进行调试 [XPath/XQuery 函数的调试](/blog/zh/2021/03/developing-and-debugging-user-functions-in-mobile-apps.md). 这些功能被整合到一个工具中，并通过两个移动应用调试视图提供给用户。

“操作调试器”视图允许开发者调试控件事件或页面事件中的“操作”。当在处理过程中遇到已选定用于调试的“操作”时，该视图将可用。 “XPath 调试器”视图会打开 XPath/XQuery 评估器窗口，用于深入跟踪和调试表达式。

开发者可以在代码的多个位置设置断点，然后逐行执行程序，并在任何一个界面暂停，以便检查完整的运行环境。

让我们来看看移动应用调试的实际操作：

![](/blog/images/MT-debugger-lead.jpg)

<!--more-->

在之前的一篇文章中，我们介绍了用于移动应用开发的[编程技巧](https://www.altova.com/blog/programming-techniques-for-mobile-development/)，并使用一个空气质量应用来演示移动应用中的一个子程序。这个子程序，以MobileTogether动作组的形式实现，它根据API返回的数据（以格林威治标准时间GMT和调整值形式提供）计算出空气质量数据的本地时间。我们可以调试这个子程序，以确保我们的计算结果是准确的。

首先，我们将在“Calc 本地时间”动作组的顶部设置一个断点，以便在调用该子程序时暂停执行

[![为移动应用调试设置断点](/blog/images/set-break.png)](set-break.png)

您可以添加任意数量的断点，并且无需担心以后难以找到它们。这些断点可以通过主调试菜单进行管理：

[![主要调试菜单中的选项](/blog/images/debug-menu-1.png)](debug-menu-1.png)

我们还使用了菜单来设置“在下一个断点处停止”的选项。现在，我们可以运行我们的应用程序在模拟器中，它会正常执行，直到调用“Calc local time”操作组。

以下图片展示了当应用程序在断点处暂停时，模拟器上的显示界面。用户选择了伦敦的城市报告，应用程序调用了API，现在它想要根据返回的数据计算当地时间：

[![程序执行暂停在断点处时，调试视图显示的内容](/blog/images/stop-at-break.png)](stop-at-break.png)

屏幕左侧打开了两个调试窗口。在顶部，我们可以看到即将执行的操作，红色断点和绿色箭头标记了当前步骤。在下面的窗口中，我们可以看到执行流程中，通往当前操作组的调用堆栈。

调用堆栈显示中，加号按钮会显示在调用动作组时传递的参数值。我们可以在顶部点击“逐步执行”按钮，以逐个步骤继续执行：

[![查看传递给子例程的参数](/blog/images/step-1.png)](step-1.png)

等等，伦敦不就在英国格林威治的同一时区吗？它不应该需要根据格林威治标准时间（GMT）进行调整吗？我咨询了所有的智能助手和搜索引擎，它们都告诉我，伦敦和格林威治都使用英国夏令时，比格林威治标准时间快一个小时。

无论如何，这就是API返回的数据，所以我们可以继续。 仔细查看代码注释，我们来到了第一个“更新节点”操作：

[![子程序执行的第一个操作](/blog/images/step-2.png)](step-2.png)

`localDateTime` 节点被设置为 `$time` 参数的值。

再次进行：

[![修改日期时间字符串](/blog/images/step-3.png)](step-3.png)

为了与 `add-hours-to-dateTime()` 函数所需的语法相匹配，我们在日期和时间之间插入字母 "T"。

再次进行：

[![从调整中增加工时](/blog/images/step-4.png)](step-4.png)

已增加调整工时。

再次进行：

[![检查并调整分钟设置](/blog/images/step-5.png)](step-5.png)

有什么需要调整的吗？没有。

再次进行：

[![从日期时间字符串中移除字母 "T"](/blog/images/step-6.png)](step-6.png)

将字母“T”替换为空格。

再次进行：

[![程序子例程的结束已到达](/blog/images/step-7.png)](step-7.png)

注释行标志着“操作”组的结束。现在，我们可以使用位于顶部的绿色箭头“运行”按钮，继续应用程序的正常运行。一个子页面会打开，用于显示空气质量指数

[![以下是包含空气质量报告的子页面的截图](/blog/images/step-8.png)](step-8.png)

因此，通过“操作视图”对移动应用程序进行调试，我们验证了我们的逻辑是正确的。

但是，在每一步都保存中间结果都非常繁琐且不必要。我们应该将这些步骤合并成一个表达式：

[![在单个步骤中进行日期和时间调整
](/blog/images/new-action-group.png)](new-action-group.png)

最初的三个操作已被禁用，并被一个包含复杂表达式的单一操作所取代。我们可以使用 XPath 调试视图来测试这个表达式。

我们本可以无缝地在不同视图之间切换，但我们暂停了第一次调试会话，以便修改表达式。现在，我们将运行这个新版本在模拟器中。这次，当它在断点处停止时，我们将使用“步入 XPath”按钮，以便在 XPath/XQuery 调试视图中启动移动应用调试：

[![在表达式视图中进行移动应用程序的调试](/blog/images/step-xpath1.png)](step-xpath1.png)

XPath/XQuery 评估器窗口会打开，调试器开始评估表达式：

[![在移动应用调试过程中，对表达式进行评估](/blog/images/step-xpath2.png)](step-xpath2.png)

现在，我们将使用 XPath 窗口中的“步进”按钮，继续逐步分析表达式：

![从内部向外部评估表达式](/blog/images/step-xpath3.png)

图像底部的区域显示了当调用动作组时，所提供的参数的内容。变量“$time”的数据来源是一个包含字符串数据的JSON节点，该节点由API返回。

再次进行：

[![为 `add-dateTime()` 函数准备字符串](/blog/images/step-xpath4.png)](step-xpath4.png)

在表达式内部，我们仍然需要确保变量 T 遵循 `add-hours-to dateTime()` 函数的语法规则。

再次进行：

![](/blog/images/step-xpath5-1.png)

现在我们已经真正进入了计算过程，并完成了表达式的计算。在这个过程中，原始的 `$time` 参数是 2020-08-03 07:00:00，而用于调整的 `$adj` 值是 -07:00。 最终，我们的计算结果是 2020-08-03T00:00:00。

下一步的操作是进行测试，以确定是否需要对分钟数进行调整。由于“adj”参数以“00”结尾，因此该测试会失败，此时“T”会被替换，并且会显示子页面

[![展示新的空气质量报告](/blog/images/san-fran-aqi.png)](san-fran-aqi.png)

如果您正在进行跨平台开发，您需要一款具有移动应用调试功能的工具。请查看我们的 MobileTogether [视频演示](https://www.altova.com/zh/mobiletogether/demos#video_Demos), 更多 [示例应用程序](https://www.altova.com/zh/mobiletogether/demos), 或者，甚至是…… [在线手册](https://www.altova.com/manual/MobileTogether/mobiletogetherdesigner/) 如果您想深入了解所有相关信息，并且准备好立即开始，以最快的速度构建您自己的跨平台移动应用程序，那么 [下载 MobileTogether 设计器](https://www.altova.com/zh/mobiletogether/download) 开始吧。
