The Ghost任务查看全攻略:当前进度与目标寻找方法
## 使用GDB查看当前活跃任务列表
连上目标设备,进入GDB命令行,敲下这行命令就行:
`monitor esp task list`
这条指令直接调用了`main/core/system_manager.c`里封装的`vTaskList()`接口,一口气输出所有任务(运行态、就绪态、阻塞态、挂起态等等)的实时快照。
**注意:** 前提是GDB已经正确加载了ESP-IDF的Python脚本支持,否则`monitor`命令是跑不起来的。
## 解析任务列表输出字段含义
执行完`monitor esp task list`,终端会甩出一张类似这样的表格:
任务名|状态|优先级|堆栈剩余|任务编号|CPU使用率
“状态”那一列会显示Running、Ready、Blocked、Suspended这些FreeRTOS标准状态,看一眼就能知道任务当前在干嘛。“堆栈剩余”如果低于200字节,那就得敲警钟了——栈溢出的风险近在眼前,得赶紧查。
“CPU使用率”是个近似值,由`vTaskGetRunTimeStats()`算出来的。这个数据只有在`configGENERATE_RUN_TIME_STATS`宏被启用、并且配好了定时器源的前提下才有意义,否则就是个摆设。
## 定位目标任务并跟踪其执行进度
想找到自己关心的那个任务?按这几步走就行:
1. 先扫一眼任务名列,找跟业务逻辑相关的关键字——比如`wifi_task`、`mqtt_client`、`sensor_read`这些。
2. 确认它的状态是不是Running或Ready。如果状态是Blocked,就得看看后面那列阻塞原因了(比如Queue、Semaphore、Delay)。
3. 翻回源码,找到`xTaskCreate()`调用处,比对`pvParameters`参数和任务名是不是一致,防止同名任务搞混淆。
4. 如果想把任务停下来细粒度调试,可以在GDB里敲:`tbreak