FreeRTOS-GDB ============ Python API Library for inspecting FreeRTOS Objects in GDB Basically, the FreeRTOS internal state is kind of hard to inspect when working with GDB. This project provides some scripts for GDB's Python API that make accessing some of these internals a little easier to inspect. ##Requirements: 1. You need to have the python API enabled in your version of GDB. This is a compile time option when building GDB. You should be able to do something like this: ``` gdb> python print "Hello World" ``` and get predictable results. If it throws an error - then you don't have python compiled in your version of GDB. 2. Need to be using FreeRTOS 8.0+. This code could probably be used with FreeRTOS version 7.0 or previous versions, but the current code doesn't support it. 3. You need to use the Handle Registry for Queue info to be any use. Note that this only works for Queue based objects and not for EventGroups 4. You need to put the FreeRTOS-GDB/src directory on your python path: ``` $> export PYTHONPATH=~/src/FreeRTOS-GDB/src/ ``` How To Use: ``` $> gdb ./bin/program.elf (gdb) c Program runs on embedded device, sets up tasks, and queues (gdb) source ~/FreeRTOS-GDB/src/FreeRTOS.py (gdb) show Task-List Name PRI STCK Ready List {0}: Num Tasks: 1 IDLE 0 107 Blocked List: Num Tasks: 11 EMAC Task 1 239 AFEC0 Task 1 295 LDSENS Task 1 195 AFEC1 Task 1 295 LineSample Task 1 281 DMAUART0 1 225 Log Task 1 273 BAT Task 1 169 Rx Task 1 421 Mng Task 2 551 Cell Task 1 275 Delayed {1}: Num Tasks: 5 Tmr Svc 3 355 62254 WLAN Task 1 205 13817 Init Task 1 445 10015 LED Task 1 179 7105 DMACOM1 1 265 7065 Delayed {2}: Num Tasks: 0 (gdb) show Queue-Info mutex Num Queues: 6 NAME CNT SEND RECEIVE LOG:LOCK 1 NONE NONE STREAM:LOCK 1 NONE NONE TWI:MUTEX 1 NONE NONE CC3000:LOCK 1 NONE NONE WLAN:LOCK 0 NONE NONE SPI:LOCK 1 NONE NONE (gdb) show Queue-Info queue Num Queues: 14 NAME CNT SEND RECEIVE TmrQ 0 Tmr Svc LOG:MSGPOOL 12 NONE NONE LOG:MSGQ 0 Log Task TWI:QUEUE 0 NONE NONE SPI:QUEUE 0 NONE NONE DMAAFEC:POOL 1 NONE NONE DMAAFEC:QUEUE 0 AFEC0 Task DMAAFEC:POOL 1 NONE NONE DMAAFEC:QUEUE 0 AFEC1 Task COM:TXPOOL 3 NONE NONE COM:TXQ 0 NONE NONE COM:RXPOOL 5 NONE NONE COM:RXQ 0 NONE NONE FATFS:MUTEX 0 NONE NONE ``` @note - the NONE's above may just be empty strings. This code adds the following custom GDB commands: * show List-Handle (symbol|address) [CastType] CastType is an optional argument that will cast all of the handles in a list to a particular type. * show Task-List * show Handle-Registry * show Handle-Name (symbole|address) * show Queue-Info [filter] filter can be "queue","mutex","semaphore", "counting", "recursive" @TODO ===== * With GDB's Python API - it doesn't seem to handle code is separate files very well. * Currently, the EventGroup objects don't have an inspector. Work in progress - ideal solution would likely modify the struct of the Event Group to provide a similar piece of info that the Queue handle does so that we could use the same registry.