跟踪堆栈跟踪随时间的进展

问题描述 投票:0回答:1

我正在用 C 语言开发单线程物联网应用程序。最终是针对 ARM 微控制器,但我有一个桌面端口。它基于 TCP/IP 层的 LWIP(基于 npcap),然后基于 MbedTLS 和 HTTP。

我目前正在分析“打嗝”,即通信有点不稳定,服务器和客户端通信之间似乎有几个 100-200 毫秒的等待期。更“传统”的网络堆栈将在 100 毫秒内处理整个请求,但我当前的实现大约需要一秒钟。

我投入时间进行桌面移植是为了 1. 证明问题是由软件堆栈造成的,2. 更容易进行调试。该行为在 ARM 硬件和桌面端口上是一致的:两者在完全相同的时间点显示相同的等待行为。

因为它是单线程的,所以层之间的通信很棘手,而且因为涉及网络,调试也很棘手。由于单步执行函数会导致超时,并且在正确的时刻暂停并没有产生任何有用的发现。

长话短说,我正在寻找一种方法来通过跟踪在什么精确时间调用什么函数来分析正在发生的情况。换句话说,我想记录或可视化堆栈跟踪随时间的进展。目前我在 Windows 上使用 Visual Studio。但该项目是基于 CMake 的,代码是可移植的 C,我可以切换到 MinGW 或 Linux GCC。

我的谷歌搜索都指向非常昂贵的硬件跟踪器,例如 J-Trace。是否有任何软件工具或 IDE 功能可以在桌面上执行此操作?有这种调试的术语(除了跟踪)吗?

c debugging trace
1个回答
0
投票

J-Trace
是一种矫枉过正 - 它用于追踪更复杂的问题,对于 uC 来说,ms 是永恒的。

如果您有可用的 SDO 引脚并且您的调试探针支持 SWO,您只需通过调试端口发送短消息即可显示调用的函数。

有一个名为 tracelyzer 的工具,这就是您需要的工具。

© www.soinside.com 2019 - 2024. All rights reserved.