• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Делюсь опытом Примитивы для отладки, в т.ч. отладка стека вызовов

valerivp

Member
Приложенные модули упрощают вывод отладочных сообщений, в т.ч. позволяют логировать стек вызовов процедур - одна строка кода в начале функции и вы в консоли увидите сообщение как о входе в функцию, так и о выходе из функции. В том числе для вложеных функций, в которых есть такая же строка.
В логе вы увидите имя файла, функции и номер строки.

Примеры вызовов:

Код:
        DEBUG_PRINT(F("Relays state change:") << toBin(PrevState) << F(" > ") << toBin(NewState));
выведет:

Код:
\RelayController.cpp:ApplyRelayState:1033: Relays state change:00000000 > 11111111

Код:
#ifdef USE_FILES_EDIT
void HTTPserverClass::handleFileUpload(AsyncWebServerRequest *request, const String& filename, size_t index, uint8_t *data, size_t len, bool final) {
   //-----------------------------
    DEBUG_STACK_PRINT(filename << " " << index << " " << len);
   //-----------------------------
Код:
void HTTPserverClass::handleWiFiScan(AsyncWebServerRequest *request) {
   //-----------------------------
    DEBUG_STACK;
   //-----------------------------
    int8_t countNetworks = WiFi.scanComplete();
Код:
void HTTPserverClass::handleSetUserConfig(AsyncWebServerRequest *request) {
   //-----------------------------
    DEBUG_STACK;
   //-----------------------------
    if (ConfigStore.getDemoMode())
        return return403_DemoMode(request);
    if (request->hasArg(F("name")) && request->hasArg(F("password"))) {
        String result;
        String name = request->arg(F("name"));
        String password = request->arg(F("password"));
   //-----------------------------
        DEBUG_PRINT(F("name:") << name << F(",password:") << password);
   //-----------------------------
 

Вложения

Последнее редактирование:
Сверху Снизу