调试合作伙伴应用程序
重要
这是 Azure Sphere(旧版)文档。 Azure Sphere(旧版)将于 2027 年 9 月 27 日停用,用户此时必须迁移到 Azure Sphere(集成)。 使用位于 TOC 上方的版本选择器查看 Azure Sphere(集成)文档。
确保通过 USB 将设备连接到电脑。 在“设置启动项”菜单中,选择 Azure Sphere 应用(所有核心),其中 Azure Sphere 应用是顶级项目的名称或按 F5。
如果系统提示你生成项目,请选择“是”。 Visual Studio 编译合作伙伴应用程序,创建映像包, 将其旁加载 到开发板上,并在调试模式下启动它们。 旁加载 意味着应用程序通过有线连接直接从电脑交付,而不是通过云传送。
请注意“视图>输出>显示输出”中的路径:生成输出,指示输出包在电脑上的位置。 准备好创建部署时,需要知道映像包的路径。
默认情况下,“输出”窗口显示设备输出的输出。 若要查看调试程序中的消息,请从“显示输出来源:”下拉菜单中选择“调试”。 也可通过“调试”>“Windows”菜单检查程序反汇编、寄存器或内存。
如果有两个 RTApp,请确保这两者在 顶级launch.vs.json文件中都列为合作伙伴应用。
使用 Visual Studio 调试器设置断点、暂停、单步执行、单步执行、单步执行、重启或停止应用程序。
在 C 源代码中的断点处停止时,可以打开一个 反汇编 窗口 ,显示当前地址、当前命令的汇编程序助记符,以及涉及的寄存器或正在执行的源代码命令等信息。
打开反汇编窗口:
- 确保 Visual Studio 中打开包含断点的 C 代码源文件。
- 选择“调试>Windows>反汇编”,或按 Alt+8。
打开包含合作伙伴应用程序的文件夹。 Visual Studio Code 会检测工作区文件,并询问是否要打开工作区。 选择“打开工作区”可同时打开实时应用程序和高级应用程序。
右键单击两个CMakeLists.txt文件之一,然后选择“ 生成所有项目”。
单击 Visual Studio Code 活动栏中的“运行”图标。
在屏幕左侧窗口顶部显示的下拉菜单上,选择“启动 Azure Sphere 应用”(gdb)(工作区)。
按 F5 生成和调试项目。 如果项目以前尚未生成,或者文件已更改并重新生成,Visual Studio Code 将在调试开始之前生成项目。
等待几秒钟,Visual Studio Code 生成应用程序、创建映像包、将其部署到开发板,并在调试模式下启动它们。 在此过程中, 你将在“输出 ”窗格中看到状态更新。
首先,CMake 确定是否需要生成应用程序。 如果是这样,焦点将移动到输出窗口,该窗口显示 CMake/Build 的输出。
接下来,输出窗格显示 azsphere 的输出,因为它将映像包部署到设备。 最后,调试控制台接收焦点并显示 gdb 输出。
使用 Visual Studio Code 调试器设置断点、暂停、单步执行、单步执行、重启或停止应用程序。
在 C 源代码中的断点处停止时,可以打开一个反汇编视图,该视图显示当前地址、原始十六进制数据、当前命令的汇编程序助记,以及涉及的寄存器或正在执行的源代码命令等信息。
打开反汇编视图:
- 确保在 Visual Studio Code 编辑器中打开包含断点的 C 代码源文件。
- 在编辑器窗口中右键单击并选择“打开反汇编视图”,或选择“视图>命令面板>打开反汇编视图”。
如果正在运行,请停止支持实时的应用程序。
azsphere device app stop --component-id <component id>
使用调试重新启动支持实时的应用程序。
azsphere device app start --component-id <component id>
此命令返回应用程序正在其上运行的内核。
<component id> App state : running Core : Real time 0
导航到生成应用程序所用的 sysroot 的 Openocd 文件夹。 sysroot 安装在 Azure Sphere SDK 安装文件夹中。 例如,在 Windows 上,该文件夹默认安装在
C:\Program Files (x86)\Microsoft Azure Sphere SDK\Sysroots\*sysroot*\tools\openocd
,而在 Linux 上安装在/opt/azurespheresdk/Sysroots/*sysroot*/tools/sysroots/x86_64-pokysdk-linux
。如下面的示例所示,运行
openocd
。 该示例假定应用在内核 0 上运行。 如果应用在内核 1 上运行,请将“目标 io0”替换为“目标 io1”。使用 PowerShell、Windows 命令提示符或 Linux 命令行界面打开命令行界面。
导航到包含支持实时的应用程序 .out 文件的文件夹并启动
arm-none-eabi-gdb
,这是 GNU Arm Embedded 工具链的一部分:Windows 命令提示符
"C:\Program Files (x86)\GNU Arm Embedded Toolchain\9 2020-q2-update\bin\arm-none-eabi-gdb" IntercoreComms_RTApp_MT3620_BareMetal.out
Windows PowerShell
& "C:\Program Files (x86)\GNU Arm Embedded Toolchain\9 2020-q2-update\bin\arm-none-eabi-gdb" IntercoreComms_RTApp_MT3620_BareMetal.out
OpenOCD 服务器在 :4444 上提供 GDB 服务器接口。 设置目标进行调试。
target remote :4444
现在可以运行 gdb 命令。 在函数 HandleSendTimerDeferred 中添加断点:
break HandleSendTimerDeferred
连接的终端模拟器应显示支持实时的应用程序的输出。
打开新的 Azure Sphere 命令提示符(Windows)或终端窗口(Linux)。
导航到包含高级应用程序 .imagepackage 文件的文件夹。
如果应用程序正在运行,请停止它,然后使用调试重新启动它:
azsphere device app stop --component-id <ComponentId>
azsphere device app start --debug-mode --component-id <ComponentId>
打开终端模拟器,并在端口 2342 上建立到 192.168.35.2 的 Telnet 或 TCP 连接,以查看高级应用的输出。
使用以下命令启动 gdb:
Windows 命令提示符
"C:\Program Files (x86)\Microsoft Azure Sphere SDK\Sysroots\*sysroot*\tools\gcc\arm-poky-linux-musleabi-gdb.exe" IntercoreComms_HighLevelApp.out
Windows PowerShell
& "C:\Program Files (x86)\Microsoft Azure Sphere SDK\Sysroots\*sysroot*\tools\gcc\arm-poky-linux-musleabi-gdb.exe" IntercoreComms_HighLevelApp.out
注意
Azure Sphere SDK 附带了多个 sysroot,以便应用程序可以面向不同的 API 集,如应用程序运行时版本、sysroot 和 Beta API 中所述。 sysroot 安装在 Sysroots 下的 Azure Sphere SDK 安装文件夹中。
将远程调试目标设置为端口 2345 上的 IP 地址 192.168.35.2:
target remote 192.168.35.2:2345
在函数 SendMessageToRTApp 中添加断点:
break SendMessageToRTApp
键入
c
继续,观察 Telnet/TCP 终端中的输出,然后切换到包含实时应用程序调试会话的命令提示符或终端窗口。键入
c
以继续并观察连接的串行会话中的输出。
可以在调试会话之间来回工作,在支持实时的应用程序与高级应用程序之间进行切换。 应在两个输出窗口中看到类似于以下内容的输出:
Starting debugger....
Process /mnt/apps/25025d2c-66da-4448-bae1-ac26fcdd3627/bin/app created; pid = 40
Listening on port 2345
Remote debugging from host 192.168.35.1, port 56522
High-level intercore comms application
Sends data to, and receives data from a real-time capable application.
Sending: hl-app-to-rt-app-00
Sending: hl-app-to-rt-app-01
IntercoreComms_RTApp_MT3620_BareMetal
App built on: Nov 17 2020, 09:25:19
Sender: 25025d2c-66da-4448-bae1-ac26fcdd3627
Message size: 19 bytes:
Hex: 68:6c:2d:61:70:70:2d:74:6f:2d:72:74:2d:61:70:70:2d:30:30
Text: hl-app-to-rt-app-00
若要结束每个调试会话,请在 gdb 提示符处键入 q
。