WiFiManager: Exception 3 WiFiManager::getParamOut() when ConfigPortal started

Basic Infos

I try the last ESP8266 SDK with development branch and it’s falls when ConfigPortal started. How I can debug this problem? It’s important to use latest SDK =(. Thanks!

Hardware

WiFimanager Branch/Release:

  • Master
  • Development

Esp8266/Esp32:

  • ESP8266
  • ESP32

Hardware: ESP-12e, esp01, esp25

  • ESP01
  • nodemcu
  • Other

ESP Core Version: 2.4.0, staging

  • 2.3.0
  • 2.4.0
  • staging (master/dev) don’t know

Description

I try development branch with 2.5.2 SDK and it fails. I’m confuzed, cause it works with 2.0.4 version… 2.1.0, 2.2.0 also raise exceptions.

I use ~30 params in config.

*WM: [3] re-allocating params bytes: 100
*WM: [2] Added Parameter:
*WM: [2] Added Parameter:
*WM: [2] Added Parameter:
*WM: [2] Added Parameter: ch0
*WM: [2] Added Parameter:
*WM: [3] Updated _max_params: 30
*WM: [3] re-allocating params bytes: 120
*WM: [2] Added Parameter:
000:00:00:00:319  NOTICE    (AP) : start config portal
*WM: [3] WIFI station disconnect 
*WM: [3] WiFi station enable 
*WM: [2] Disabling STA 
*WM: [2] Enabling AP 
*WM: [1] StartAP with SSID:  Waterius_0.9.0
*WM: [2] AP has anonymous access! 
*WM: [1] AP IP address: 192.168.4.1
*WM: [3] setupConfigPortal 
*WM: [1] Starting Web Portal 
*WM: [3] dns server started with ip:  192.168.4.1
*WM: [2] HTTP server started 
*WM: [2] WiFi Scan ASYNC started 
*WM: [2] Config Portal Running, blocking, waiting for clients... 
*WM: [2] WiFi Scan ASYNC completed in 2192 ms
*WM: [2] WiFi Scan ASYNC found: 9
*WM: [2] <- HTTP Root 
*WM: [3] -> 192.168.4.1 
*WM: [2] Scan is cached 3409 ms ago
*WM: [2] <- HTTP Wifi 
*WM: [2] Scan is cached 4739 ms ago
*WM: [1] 9 networks found
*WM: [2] AP:  -48 doddd
*WM: [2] AP:  -53 dodd
*WM: [2] AP:  -64 mgts201
*WM: [2] AP:  -64 MGTS_GPON_58DA
*WM: [2] AP:  -70 romper-stomper
*WM: [2] AP:  -73 Onlime_205
*WM: [2] AP:  -74 MGTS_GPON_1235
*WM: [2] AP:  -85 MGTS_GPON_233
*WM: [2] AP:  -86 Beeline_2G_F24152

Versions

*WM: [1] getCoreVersion():          2_5_2
*WM: [1] system_get_sdk_version():  2.2.1(cfd48f3)
*WM: [1] system_get_boot_version(): 31
*WM: [1] getFreeHeap():             36344

Exception decode

Decoding 48 results
0x40269e21: sleep_reset_analog_rtcreg_8266 at ?? line ?
0x4026cf5f: sleep_reset_analog_rtcreg_8266 at ?? line ?
0x4020dec2: WiFiManager::getParamOut() at /Users/dontsov/Library/Arduino15/packages/esp8266/hardware/esp8266/2.5.2/cores/esp8266/WString.h line 117 (discriminator 2)
:  (inlined by) WiFiManager::getParamOut() at /Users/dontsov/Documents/Arduino/libraries/WiFiManager-waterius_release_090/WiFiManager.cpp line 1285 (discriminator 2)
0x40217c6c: String::changeBuffer(unsigned int) at /Users/dontsov/Library/Arduino15/packages/esp8266/hardware/esp8266/2.5.2/cores/esp8266/WString.cpp line 179
0x4020daf7: WiFiManager::getStaticOut() at /Users/dontsov/Documents/Arduino/libraries/WiFiManager-waterius_release_090/WiFiManager.cpp line 1222
0x4026cf14: sleep_reset_analog_rtcreg_8266 at ?? line ?
0x4026cf55: sleep_reset_analog_rtcreg_8266 at ?? line ?
0x40218359: String::concat(__FlashStringHelper const*) at /Users/dontsov/Library/Arduino15/packages/esp8266/hardware/esp8266/2.5.2/cores/esp8266/WString.h line 268
:  (inlined by) String::concat(__FlashStringHelper const*) at /Users/dontsov/Library/Arduino15/packages/esp8266/hardware/esp8266/2.5.2/cores/esp8266/WString.cpp line 396
0x4026b4c6: sleep_reset_analog_rtcreg_8266 at ?? line ?
0x40213344: FunctionRequestHandler::handle(ESP8266WebServer&, HTTPMethod, String) at /Users/dontsov/Library/Arduino15/packages/esp8266/hardware/esp8266/2.5.2/libraries/ESP8266WebServer/src/detail/RequestHandlersImpl.h line 37
0x4026b4c6: sleep_reset_analog_rtcreg_8266 at ?? line ?
0x40210067: WiFiManager::handleWifi(bool) at /Users/dontsov/Library/Arduino15/packages/esp8266/hardware/esp8266/2.5.2/cores/esp8266/WString.h line 117
:  (inlined by) WiFiManager::handleWifi(bool) at /Users/dontsov/Documents/Arduino/libraries/WiFiManager-waterius_release_090/WiFiManager.cpp line 973
0x4021cc74: std::_Function_handler    (WiFiManager*, bool)> >::_M_invoke(std::_Any_data const&) at /Users/dontsov/Library/Arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/2.5.0-3-20ed2b9/xtensa-lx106-elf/include/c++/4.8.2/functional line 2073
0x40212748: FunctionRequestHandler::canHandle(HTTPMethod, String) at /Users/dontsov/Library/Arduino15/packages/esp8266/hardware/esp8266/2.5.2/libraries/ESP8266WebServer/src/detail/RequestHandlersImpl.h line 20
0x401000a9: std::function ::operator()() const at /Users/dontsov/Library/Arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/2.5.0-3-20ed2b9/xtensa-lx106-elf/include/c++/4.8.2/functional line 2465
0x4021337a: FunctionRequestHandler::handle(ESP8266WebServer&, HTTPMethod, String) at /Users/dontsov/Library/Arduino15/packages/esp8266/hardware/esp8266/2.5.2/libraries/ESP8266WebServer/src/detail/RequestHandlersImpl.h line 44
0x40217f40: String::String(String const&) at /Users/dontsov/Library/Arduino15/packages/esp8266/hardware/esp8266/2.5.2/cores/esp8266/WString.cpp line 41
0x40213405: ESP8266WebServer::_handleRequest() at /Users/dontsov/Library/Arduino15/packages/esp8266/hardware/esp8266/2.5.2/libraries/ESP8266WebServer/src/ESP8266WebServer.cpp line 599
0x4021361c: ESP8266WebServer::handleClient() at /Users/dontsov/Library/Arduino15/packages/esp8266/hardware/esp8266/2.5.2/libraries/ESP8266WebServer/src/ESP8266WebServer.cpp line 308
0x4021c50b: WiFiUDP::parsePacket() at /Users/dontsov/Library/Arduino15/packages/esp8266/hardware/esp8266/2.5.2/libraries/ESP8266WiFi/src/WiFiUdp.cpp line 199
0x4021503c: DNSServer::processNextRequest() at /Users/dontsov/Library/Arduino15/packages/esp8266/hardware/esp8266/2.5.2/libraries/DNSServer/src/DNSServer.cpp line 166
0x40211d15: WiFiManager::processConfigPortal() at /Users/dontsov/Documents/Arduino/libraries/WiFiManager-waterius_release_090/WiFiManager.cpp line 610
0x40210ce8: WiFiManager::configPortalHasTimeout() at /Users/dontsov/Documents/Arduino/libraries/WiFiManager-waterius_release_090/WiFiManager.cpp line 450
0x4026b26c: sleep_reset_analog_rtcreg_8266 at ?? line ?
0x40218ff0: esp_yield at /Users/dontsov/Library/Arduino15/packages/esp8266/hardware/esp8266/2.5.2/cores/esp8266/core_esp8266_main.cpp line 91
0x40212071: WiFiManager::startConfigPortal(char const*, char const*) at /Users/dontsov/Documents/Arduino/libraries/WiFiManager-waterius_release_090/WiFiManager.cpp line 577
0x402173c9: Print::write(char const*) at /Users/dontsov/Library/Arduino15/packages/esp8266/hardware/esp8266/2.5.2/cores/esp8266/Print.h line 60
0x40217424: Print::print(char const*) at /Users/dontsov/Library/Arduino15/packages/esp8266/hardware/esp8266/2.5.2/cores/esp8266/Print.cpp line 122
0x402075d0: setup_ap(Settings&, SlaveData const&, CalculatedData const&) at /var/folders/6d/w28yfrld7b7c_v7ss8cngjb40000gn/T/arduino_build_501521/sketch/setup_ap.cpp line 210
0x4026a06c: sleep_reset_analog_rtcreg_8266 at ?? line ?
0x40269e21: sleep_reset_analog_rtcreg_8266 at ?? line ?
0x40269d48: sleep_reset_analog_rtcreg_8266 at ?? line ?
0x40269d96: sleep_reset_analog_rtcreg_8266 at ?? line ?
0x4026a06c: sleep_reset_analog_rtcreg_8266 at ?? line ?
0x40269fae: sleep_reset_analog_rtcreg_8266 at ?? line ?
0x40269e70: sleep_reset_analog_rtcreg_8266 at ?? line ?
0x40269ebe: sleep_reset_analog_rtcreg_8266 at ?? line ?
0x40269ab9: sleep_reset_analog_rtcreg_8266 at ?? line ?
0x40269ceb: sleep_reset_analog_rtcreg_8266 at ?? line ?
0x4026a088: sleep_reset_analog_rtcreg_8266 at ?? line ?
0x4026a000: sleep_reset_analog_rtcreg_8266 at ?? line ?
0x4026a00e: sleep_reset_analog_rtcreg_8266 at ?? line ?
0x4026a020: sleep_reset_analog_rtcreg_8266 at ?? line ?
0x40206b30: operator   at /var/folders/6d/w28yfrld7b7c_v7ss8cngjb40000gn/T/arduino_build_501521/sketch/Logging.h line 11
:  (inlined by) MasterI2C::getSlaveData(SlaveData&) at /var/folders/6d/w28yfrld7b7c_v7ss8cngjb40000gn/T/arduino_build_501521/sketch/master_i2c.cpp line 106
0x4020584c: loop at /Users/dontsov/Documents/CODE/waterius/ESP8266/main/main.ino line 73
0x40203421: setup at /Users/dontsov/Documents/CODE/waterius/ESP8266/main/main.ino line 32
0x402190a0: loop_wrapper() at /Users/dontsov/Library/Arduino15/packages/esp8266/hardware/esp8266/2.5.2/cores/esp8266/core_esp8266_main.cpp line 125
0x40101125: cont_wrapper at /Users/dontsov/Library/Arduino15/packages/esp8266/hardware/esp8266/2.5.2/cores/esp8266/cont.S line 81

About this issue

  • Original URL
  • State: closed
  • Created 5 years ago
  • Comments: 36 (19 by maintainers)

Most upvoted comments

@tablatronix I try to describe: in esp PROGMEM string must be used only by special fuctions: memcmp_P, strlen_P and etc.

Working with PROGMEM strings with common functions “strlen”, “memcmp”, “scanf” is dangerous (read “prohibited”).

What’s why this “operator=” can raise exception: https://github.com/tzapu/WiFiManager/blob/master/WiFiManager.cpp#L543

Look at String contructors:

String::String(const char *cstr) {  //for common strings
    init();
    if(cstr)
        copy(cstr, strlen(cstr));
}

String::String(const __FlashStringHelper *pstr) { //for PROGMEM
    init();
    *this = pstr; // see operator =
}

String & String::operator = (const __FlashStringHelper *pstr)
{
    if (pstr) copy(pstr, strlen_P((PGM_P)pstr));  //WOW strlen_P not strlen 
    else invalidate();
    return *this;
}
String & String::copy(const __FlashStringHelper *pstr, unsigned int length) {
    if (!reserve(length)) {
        invalidate();
        return *this;
    }
    setLen(length);
    strcpy_P(wbuffer(), (PGM_P)pstr);  //WOW #2 strcpy_P not strcpy
    return *this;
}

https://github.com/esp8266/Arduino/pull/6450#issuecomment-531651119

if you set DEBUG_MAX in .h file for debuglevel uint8_t _debugLevel = DEBUG_MAX;

you will get debugging for heap size in logs. I am guessing you are out of memory, and sdk uses more now ?