Контекст: profile, registers, frames, locals

Данные прогона и проекта; регистры ядра, стек вызовов, локальные переменные и аргументы.

с 0.1.0-rc.1с 0.3.0

Методы

ЭлементСигнатураДоступен сAPI 3
profileprofile: Profile0.1.0-rc.1¹без изменений
registersregisters(*names, frame=None) -> dict0.3.0без изменений
framesframes(limit=16) -> dict0.3.0без изменений
locals, argumentslocals(frame=None) -> dict; arguments(frame=None) -> dict0.3.0без изменений

¹ Базовая форма; расширения 0.3.0 описаны в карточке.

Изменения API 3 (0.5.0)

Без изменений, await не нужен.

Правильно

Параметры проекта — profile.get с умолчанием; аргументы — в остановленном кадре.

count = t.profile.get("user.measurement.count", 10)
core = t.registers("pc", "sp")
t.record("core", core)
t.check("top frame", t.frames(limit=8)["frames"][0]["function"], "app_step")
t.reach("app_step")
t.check("mode argument", t.arguments()["values"]["mode"], t.evaluate("APP_MODE_BLINK"))

Не рекомендуется

Жёсткие числа в сценарии вместо параметров профиля; чтение цепочки индексов падает, если раздела нет.

count = t.profile["user"]["measurement"]["count"]   # fails without the section
t.check("delay", t.read("app_delay"), 100)            # expectation not taken from the profile

Фрагменты показывают отклонённые или нежелательные приёмы, а не рабочий рецепт.

Фрагменты для тела сценария; символы прошивки условные.

← Журнал и SKIPВсе группыСброс и команды GDB →