调试高级应用程序
确保设备通过 USB 连接到电脑。 在 “设置启动项 ”菜单中,选择“ Azure Sphere 应用 (HLCore) ,其中 Azure Sphere 应用 是当前高级应用程序的名称,或按 F5。
如果系统提示生成项目,请选择“ 是”。 Visual Studio 编译应用程序,创建映像包, 将其旁加载 到开发板上,并在调试模式下启动它。 旁加载 意味着应用程序通过有线连接直接从电脑交付,而不是通过云传递。
在“查看>输出显示输出来源:生成输出>”中记下映像包的图像 ID。 稍后将在 教程:创建云部署中使用映像 ID。
默认情况下,“ 输出 ”窗口显示 设备输出的输出。 若要查看来自调试器的消息,请从“显示输出来源:”下拉菜单中选择“调试”。 还可以通过 “调试>Windows ”菜单检查程序反汇编、寄存器或内存。
然后,可以使用 Visual Studio 调试器 设置断点、暂停、单步执行、单步执行、重启或停止应用程序。
在 C 源代码中的断点处停止时,可以打开 反汇编 窗口 ,该窗口显示当前地址、当前命令的汇编器助记符,以及涉及的寄存器或正在执行的源代码命令等信息。
打开 “反汇编 ”窗口:
- 确保在 Visual Studio 中打开包含断点的 C 代码源文件。
- 选择“ 调试>Windows>反汇编”,或按 Alt+8。
按 F5 生成和调试项目。 如果之前尚未生成项目,或者文件已更改且需要重新生成,Visual Studio Code将在调试开始之前生成项目。
等待几秒钟,让Visual Studio Code生成应用程序、创建映像包、将其部署到开发板,并在调试模式下启动它。 在此过程中,你将在“ 输出 ”窗格中看到状态更新。
首先,CMake 确定是否需要生成应用程序。 如果是这样,焦点将转移到输出窗口,该窗口显示来自 CMake/Build 的输出。
接下来,“ 输出 ”窗格会在映像包部署到设备时显示结果。 最后,调试控制台接收焦点并显示调试器输出。
使用 Visual Studio Code 调试器设置断点、暂停、单步执行、单步执行、重启或停止应用程序。
在 C 源代码中的断点处停止时,可以打开反汇编视图,该视图显示当前地址、原始十六进制数据、当前命令的汇编程序助记符以及涉及的寄存器或正在执行的源代码命令等信息。
打开反汇编视图:
- 确保在Visual Studio Code编辑器中打开包含断点的 C 代码源文件。
- 在编辑器窗口中右键单击并选择“ 打开反汇编视图 ”或选择“ 查看>命令面板>”“打开反汇编视图”。
若要调试应用程序,请将其停止,然后使用调试将其重启:
azsphere device app stop --component-id <ComponentId>
azsphere device app start --debug-mode --component-id <ComponentId>
应会看到:
<ComponentID>
App state : debugging
GDB port : 2345
Output port : 2342
Core : High-level
Command completed successfully in 00:00:00.9121174.
打开命令提示符,并使用任何 Windows 终端客户端 建立 Telnet 或原始 TCP 连接,以从进程读取输出流。 指定 192.168.35.2 作为 IP 地址,将 2342 指定为端口。
使用 PowerShell、Windows 命令提示符或 Linux 命令行界面打开命令行界面。 启动 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 集,如 应用程序运行时版本、sysroots 和 Beta API 中所述。 sysroot 安装在 Sysroots 下的 Azure Sphere SDK 安装文件夹中。
将端口 2345 上的远程调试目标设置为 IP 地址 192.168.35.2:
target remote 192.168.35.2:2345
运行所选的任何 gdb 命令。 例如:
break main
c
break
和c
命令在输入时将断点设置为 main () ,然后分别在断点之后继续执行。 gdb 提供了许多文档来源。