Debug: freertos gdb plugin.
This commit is contained in:
63
debug/FreeRTOS/FreeRTOSgdb/Task.py
Normal file
63
debug/FreeRTOS/FreeRTOSgdb/Task.py
Normal file
@@ -0,0 +1,63 @@
|
||||
# File: Task.py
|
||||
# Author: Carl Allendorph
|
||||
# Date: 05NOV2014
|
||||
#
|
||||
# Description:
|
||||
# This file contains the implementation of a class to use for
|
||||
# inspecting the state of a FreeRTOS Task in GDB
|
||||
#
|
||||
|
||||
import gdb
|
||||
|
||||
|
||||
class TaskInspector:
|
||||
|
||||
TCBType = gdb.lookup_type("TCB_t")
|
||||
|
||||
def __init__(self, handle):
|
||||
self._tcb = None
|
||||
# print("Task: Pass Handle: %s" % str(handle))
|
||||
|
||||
try:
|
||||
if handle.type == TaskInspector.TCBType:
|
||||
self._tcb = handle
|
||||
return
|
||||
else:
|
||||
print("Handle Type: %s" % str(handle.type))
|
||||
|
||||
except AttributeError as aexc:
|
||||
print("Attribute Error: %s" % str(aexc))
|
||||
pass
|
||||
except Exception as exc:
|
||||
print("Error Initializing Task Inspector: %s" % str(exc))
|
||||
raise
|
||||
|
||||
try:
|
||||
tcbPtr = gdb.Value(handle).cast(TaskInspector.TCBType.pointer())
|
||||
self._tcb = tcbPtr.dereference()
|
||||
return
|
||||
except Exception as exc:
|
||||
print("Failed to convert Handle Pointer: %s" % str(handle))
|
||||
|
||||
self._tcb = handle
|
||||
|
||||
def GetName(self):
|
||||
if self._tcb != None:
|
||||
return self._tcb["pcTaskName"].string()
|
||||
else:
|
||||
raise ValueError("Invalid TCB")
|
||||
|
||||
def GetPriority(self):
|
||||
if self._tcb != None:
|
||||
return self._tcb["uxPriority"]
|
||||
else:
|
||||
raise ValueError("Invalid TCB")
|
||||
|
||||
def GetStackMargin(self):
|
||||
if self._tcb != None:
|
||||
topStack = self._tcb["pxTopOfStack"]
|
||||
stackBase = self._tcb["pxStack"]
|
||||
highWater = topStack - stackBase
|
||||
return highWater
|
||||
else:
|
||||
raise ValueError("Invalid TCB")
|
Reference in New Issue
Block a user