woshi_ziyu
发表于: 3 天前 | 显示全部楼层

本教程介绍如何使用VisualGDB的软件跟踪功能来分析在STMF7-Discovery开发板上运行的简单HTTP服务器的实时行为。我们将首先跟踪DHCP逻辑,快速显示正在调用哪些函数,然后修改跟踪点以记录传入和传出的DHCP数据包,最后介绍如何使用跟踪来记录HTTP客户端请求的所有页面的URL。


开始之前,请安装VisualGDB 6.0或更高版本。

1. 首先启动Visual Studio,然后打开 VisualGDB Embedded Project Wizard嵌入式项目向导:

01-emb.png

2. 输入项目的名称和所在位置:

02-prjname-1.png

3. 选择默认选项(新嵌入式应用程序 -> Advanced CMake):

03-cmake-1.png

4. 选择最新的ARM工具链并选择使用的器件:

04-dev.png

5. 在下一页上选择STM32CubeMX Samples->LwIP->LwIP_HTTP_Server_Netconn_RTOS

05-lwip.png

6. 最后,配置调试设置并单击“Finish”以创建项目:

06-stlink-1.png

7. 按F5构建项目并开始调试。一旦它从DHCP服务器获得IP地址,请尝试在浏览器中打开它。如果一切顺利,您应该会看到以下页面:

07-tcp.png

8. 现在我们将展示如何使用软件跟踪查看目标上运行的函数,并记录其执行的详细信息。打开 Debug->Windows->Tracepoints 窗口,在过滤器中键入“dhcp”,选择所有函数(Ctrl+A)并按空格键跟踪所有函数:

08-dhcp.png

9. 为了避免任何内存开销,在我们设置第一个跟踪点之前,VisualGDB没有为跟踪数据保留任何内存,因此您需要重新启动调试会话才能开始跟踪:

09-start.png

您可以通过VisualGDB Project Properties -> Software Tracing配置此行为(即始终保留跟踪内存)。

10. 再次启动调试会话后,VisualGDB 将显示dhcp_fine_tmr() 一直在运行,而dhcp_recv()等函数执行了几次后就停止了:

10-tracepoints.png

11. 选择 dhcp_recv() 的跟踪点,并将其配置为将 addr->addr 记录为 IP 地址,将端口记录为 UInt16

11-data.png

12. 还可以将 p->payload 记录为 [p->len] 元素的动态数组:

12-len.png

13. 单击“应用”,VisualGDB 将自动修补 FLASH 内存中的跟踪程序:

14-patch.png

14. 我们还可以记录数据包中包含的特定 DHCP 选项。由于我们已经记录了整个数据包,因此这将是多余的,但可以更快地看到正在发生的事情。在 dhcp_parse_reply() 中的选项字节检查中设置一个跟踪点,并将其设置为记录 op:

15-op.png

15. 同样,记录 dhcp_option() 以跟踪传出数据包中的选项:

16-op2.png

16. 在计算出 struct dhcp 的地址后,在 dhcp_bind() 中放置另一个跟踪点并记录其所有字段:

17-bound.png

17. 重新连接网线以强制进行另一次 DHCP 通信并检查跟踪的事件。选择所有事件并单击“导出选定事件”:

18-export.png

18. 您还可以让 VisualGDB 使用来自相关跟踪点的数据创建表格。创建一个新的表格视图,如下所示:

19-newview.png

19. 将记录它们的跟踪点中的选项值拖到一列中,然后为传入/传出数据包长度添加另一列,再为 DHCP 状态添加一列。 VisualGDB 将以更紧凑的形式显示相同的信息:

20-options.png

20. 单击工具栏上的“导出跟踪点集”按钮并输入该集的名称。VisualGDB 将保存跟踪点(及其配置)并将其从列表中删除:

21-export.png

下次您想要跟踪 DHCP 逻辑时,只需通过上下文菜单导入跟踪点集即可。

21. 现在我们将展示如何记录 HTTP 客户端请求的所有页面的 URL。转到 http_server_serve(),在第一个 URL 比较上设置跟踪点,并将 buf 记录为以空字符结尾的字符串:

22-buf.png

22. 刷新页面并观察 VisualGDB 如何记录新事件。然后,创建另一个表视图:

23-newview.png

23. 将其中一个事件的 [string] 值拖到视图的底部,VisualGDB 将显示一个包含跟踪逻辑记录的所有请求的表:

24-rqlist.png

您还可以将任何其他信息与请求一起记录(例如远程 IP 地址、精确时间戳等),以详细了解固件正在做什么,而无需停止它。

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 33 | 回复: 52



手机版|

GMT+8, 2024-12-16 23:43 , Processed in 0.049387 second(s), 8 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表