|
本教程介绍如何使用VisualGDB的软件跟踪功能来分析在STMF7-Discovery开发板上运行的简单HTTP服务器的实时行为。我们将首先跟踪DHCP逻辑,快速显示正在调用哪些函数,然后修改跟踪点以记录传入和传出的DHCP数据包,最后介绍如何使用跟踪来记录HTTP客户端请求的所有页面的URL。
开始之前,请安装VisualGDB 6.0或更高版本。 1. 首先启动Visual Studio,然后打开 VisualGDB Embedded Project Wizard嵌入式项目向导:
2. 输入项目的名称和所在位置:
3. 选择默认选项(新嵌入式应用程序 -> Advanced CMake):
4. 选择最新的ARM工具链并选择使用的器件:
5. 在下一页上选择STM32CubeMX Samples->LwIP->LwIP_HTTP_Server_Netconn_RTOS:
6. 最后,配置调试设置并单击“Finish”以创建项目:
7. 按F5构建项目并开始调试。一旦它从DHCP服务器获得IP地址,请尝试在浏览器中打开它。如果一切顺利,您应该会看到以下页面:
8. 现在我们将展示如何使用软件跟踪查看目标上运行的函数,并记录其执行的详细信息。打开 Debug->Windows->Tracepoints 窗口,在过滤器中键入“dhcp”,选择所有函数(Ctrl+A)并按空格键跟踪所有函数:
9. 为了避免任何内存开销,在我们设置第一个跟踪点之前,VisualGDB没有为跟踪数据保留任何内存,因此您需要重新启动调试会话才能开始跟踪:
您可以通过VisualGDB Project Properties -> Software Tracing配置此行为(即始终保留跟踪内存)。 10. 再次启动调试会话后,VisualGDB 将显示dhcp_fine_tmr() 一直在运行,而dhcp_recv()等函数执行了几次后就停止了:
11. 选择 dhcp_recv() 的跟踪点,并将其配置为将 addr->addr 记录为 IP 地址,将端口记录为 UInt16:
12. 还可以将 p->payload 记录为 [p->len] 元素的动态数组:
13. 单击“应用”,VisualGDB 将自动修补 FLASH 内存中的跟踪程序:
14. 我们还可以记录数据包中包含的特定 DHCP 选项。由于我们已经记录了整个数据包,因此这将是多余的,但可以更快地看到正在发生的事情。在 dhcp_parse_reply() 中的选项字节检查中设置一个跟踪点,并将其设置为记录 op:
15. 同样,记录 dhcp_option() 以跟踪传出数据包中的选项:
16. 在计算出 struct dhcp 的地址后,在 dhcp_bind() 中放置另一个跟踪点并记录其所有字段:
17. 重新连接网线以强制进行另一次 DHCP 通信并检查跟踪的事件。选择所有事件并单击“导出选定事件”:
18. 您还可以让 VisualGDB 使用来自相关跟踪点的数据创建表格。创建一个新的表格视图,如下所示:
19. 将记录它们的跟踪点中的选项值拖到一列中,然后为传入/传出数据包长度添加另一列,再为 DHCP 状态添加一列。 VisualGDB 将以更紧凑的形式显示相同的信息:
20. 单击工具栏上的“导出跟踪点集”按钮并输入该集的名称。VisualGDB 将保存跟踪点(及其配置)并将其从列表中删除:
下次您想要跟踪 DHCP 逻辑时,只需通过上下文菜单导入跟踪点集即可。 21. 现在我们将展示如何记录 HTTP 客户端请求的所有页面的 URL。转到 http_server_serve(),在第一个 URL 比较上设置跟踪点,并将 buf 记录为以空字符结尾的字符串:
22. 刷新页面并观察 VisualGDB 如何记录新事件。然后,创建另一个表视图:
23. 将其中一个事件的 [string] 值拖到视图的底部,VisualGDB 将显示一个包含跟踪逻辑记录的所有请求的表:
您还可以将任何其他信息与请求一起记录(例如远程 IP 地址、精确时间戳等),以详细了解固件正在做什么,而无需停止它。 |