Ошибка запуска FirebaseDemo в NodeMCU
Поэтому я последовал руководству на GitHub, чтобы запустить эту демо-версию, которая компилируется и запускается. Он предупреждает о некоторых устареваниях и тому подобном в библиотеках firebase:
В функции-члене 'const String& FirebaseArduino::error()' предупреждение: возврат ссылки на временный [-Wret-local-addr] return error_.message().c_str();
Он не может обновить мою базу данных firebase, и сообщение об ошибке firebase не отображается, по-видимому, из-за вышеуказанной ошибки. Но это действительно усложняет отладку ...
Кто-нибудь может помочь мне обойти это?
Ценю любые отзывы или профессиональные советы :)
Обновить
Поэтому нашел проблему на GitHub, которая решила проблему подключения к базе данных. Очевидно, обновление отпечатков пальцев... https://github.com/FirebaseExtended/firebase-arduino/issues/369 но все же хотелось бы решить ошибку библиотеки firebase, чтобы каждый мог получать разборчивые сообщения об ошибках при ее использовании.
@AMAN77, 👍0
2 ответа
Это совершенно правильно сказать вам. Оскорбительный код находится здесь:
const String& FirebaseArduino::error() {
return error_.message().c_str();
}
При этом он вызывает функцию message()
для объекта error_, чтобы получить
объект std::string
, из которого затем получает строковые данные C с помощью c_str()
. Затем он создает (из-за возвращаемого типа) временный строковый
объект и копирует в него строковые данные C.
Затем возвращается ссылка на этот временный строковый
объект, и строка
немедленно уничтожается. Это плохо. Возвращенная ссылка теперь ни на что конкретно не указывает.
Меня бы не удивило, если бы были и другие места, где происходят подобные вещи. Это объясняет, почему все не обязательно работает правильно.
Вы должны поднять вопрос на странице вопросов Github для этого проекта с автором.
Он предупреждает о некоторых устареваниях и тому подобном в библиотеках firebase:
В функции-члене 'const String& FirebaseArduino::error()' warning: returning reference to temporary [-Wret-local-addr] return error_.message().c_str();
я также получаю некоторую амортизацию, такую как
/home/praz/Arduino/libraries/firebase-arduino-master/src/FirebaseObject.cpp: In member function 'bool FirebaseObject::isNullString(const String&) const':
/home/praz/Arduino/libraries/firebase-arduino-master/src/FirebaseObject.cpp:67:57: warning: 'const char* ArduinoJson::Internals::JsonVariantCasts<TImpl>::asString() const [with TImpl = ArduinoJson::JsonVariant]' is deprecated (declared at /home/praz/Arduino/libraries/ArduinoJson-5.13.1/src/ArduinoJson/Deserialization/../JsonVariantCasts.hpp:28): use as<char*>() instead [-Wdeprecated-declarations]
return variant.is<const char *>() && variant.asString() == NULL;
^
/home/praz/Arduino/libraries/firebase-arduino-master/src/FirebaseObject.cpp: In member function 'ArduinoJson::JsonVariant FirebaseObject::getJsonVariant(const String&) const':
/home/praz/Arduino/libraries/firebase-arduino-master/src/FirebaseObject.cpp:87:26: warning: 'ArduinoJson::JsonObject& ArduinoJson::Internals::JsonVariantCasts<TImpl>::asObject() const [with TImpl = ArduinoJson::JsonVariant]' is deprecated (declared at /home/praz/Arduino/libraries/ArduinoJson-5.13.1/src/ArduinoJson/Deserialization/../JsonVariantCasts.hpp:23): use as<JsonObject>() instead [-Wdeprecated-declarations]
json = json.asObject().get<JsonVariant>(start);
^
/home/praz/Arduino/libraries/firebase-arduino-master/src/throw_out_of_range.cpp:6:28: warning: unused parameter 'str' [-Wunused-parameter]
void __attribute__((weak)) __throw_out_of_range(const char* str) {
^
In file included from /home/praz/Arduino/libraries/firebase-arduino-master/src/FirebaseCloudMessaging.cpp:1:0:
/home/praz/Arduino/libraries/firebase-arduino-master/src/FirebaseCloudMessaging.h:82:79: warning: type qualifiers ignored on function return type [-Wignored-qualifiers]
const void AddToJson(const FirebaseCloudMessage& message, JsonObject& json) const;
^
/home/praz/Arduino/libraries/firebase-arduino-master/src/FirebaseCloudMessaging.cpp:80:60: warning: type qualifiers ignored on function return type [-Wignored-qualifiers]
const FirebaseCloudMessage& message, JsonObject& json) const {
^
/home/praz/Arduino/libraries/firebase-arduino-master/src/Firebase.cpp: In member function 'int FirebaseRequest::sendRequest(const string&, const string&, char*, const string&, const string&)':
/home/praz/Arduino/libraries/firebase-arduino-master/src/Firebase.cpp:76:1: warning: no return statement in function returning non-void [-Wreturn-type]
}
^
/home/praz/Arduino/libraries/firebase-arduino-master/src/Firebase.cpp: In member function 'void FirebaseStream::startStreaming(const string&, const string&, const string&)':
/home/praz/Arduino/libraries/firebase-arduino-master/src/Firebase.cpp:89:48: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
analyzeError("STREAM", status, path_with_auth);
^
/home/praz/Arduino/libraries/firebase-arduino-master/src/FirebaseArduino.cpp: In member function 'String FirebaseArduino::push(const String&, const ArduinoJson::JsonVariant&)':
/home/praz/Arduino/libraries/firebase-arduino-master/src/FirebaseArduino.cpp:65:79: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
int status = req_.get()->sendRequest(host_, auth_, "POST", path.c_str(), buf);
^
/home/praz/Arduino/libraries/firebase-arduino-master/src/FirebaseArduino.cpp:65:7: warning: unused variable 'status' [-Wunused-variable]
int status = req_.get()->sendRequest(host_, auth_, "POST", path.c_str(), buf);
^
/home/praz/Arduino/libraries/firebase-arduino-master/src/FirebaseArduino.cpp: In member function 'void FirebaseArduino::set(const String&, const ArduinoJson::JsonVariant&)':
/home/praz/Arduino/libraries/firebase-arduino-master/src/FirebaseArduino.cpp:94:65: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
req_.get()->sendRequest(host_, auth_, "PUT", path.c_str(), buf);
^
/home/praz/Arduino/libraries/firebase-arduino-master/src/FirebaseArduino.cpp: In member function 'void FirebaseArduino::getRequest(const String&)':
/home/praz/Arduino/libraries/firebase-arduino-master/src/FirebaseArduino.cpp:101:60: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
req_.get()->sendRequest(host_, auth_, "GET", path.c_str());
^
/home/praz/Arduino/libraries/firebase-arduino-master/src/FirebaseArduino.cpp: In member function 'virtual void FirebaseArduino::remove(const String&)':
/home/praz/Arduino/libraries/firebase-arduino-master/src/FirebaseArduino.cpp:147:63: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
req_.get()->sendRequest(host_, auth_, "DELETE", path.c_str());
^
/home/praz/Arduino/libraries/firebase-arduino-master/src/FirebaseArduino.cpp: In member function 'virtual const String& FirebaseArduino::error()':
/home/praz/Arduino/libraries/firebase-arduino-master/src/FirebaseArduino.cpp:201:33: warning: returning reference to temporary [-Wreturn-local-addr]
return error_.message().c_str();
^
/home/praz/Arduino/libraries/firebase-arduino-master/src/FirebaseHttpClient_Esp8266.cpp: In member function 'virtual void FirebaseHttpClientEsp8266::begin(const string&)':
/home/praz/Arduino/libraries/firebase-arduino-master/src/FirebaseHttpClient_Esp8266.cpp:47:50: warning: 'bool HTTPClient::begin(String, String)' is deprecated (declared at /home/praz/.arduino15/packages/esp8266/hardware/esp8266/2.4.2/libraries/ESP8266HTTPClient/src/ESP8266HTTPClient.h:156) [-Wdeprecated-declarations]
http_.begin(url.c_str(), kFirebaseFingerprint);
^
/home/praz/Arduino/libraries/firebase-arduino-master/src/FirebaseHttpClient_Esp8266.cpp: In member function 'virtual void FirebaseHttpClientEsp8266::begin(const string&, const string&)':
/home/praz/Arduino/libraries/firebase-arduino-master/src/FirebaseHttpClient_Esp8266.cpp:51:80: warning: 'bool HTTPClient::begin(String, uint16_t, String, String)' is deprecated (declared at /home/praz/.arduino15/packages/esp8266/hardware/esp8266/2.4.2/libraries/ESP8266HTTPClient/src/ESP8266HTTPClient.h:157) [-Wdeprecated-declarations]
http_.begin(host.c_str(), kFirebasePort, path.c_str(), kFirebaseFingerprint);
^
Compiling library "ESP8266HTTPClient"
чтобы исправить это, перейдите в Настройки в предупреждениях компилятора выберите по умолчанию. он проигнорировал все предупреждения в амортизации, не забудьте обновить свою библиотеку, чтобы получить Firebase Fingerprint изменился 2 августа 2018года.
Загрузив свой скетч снова, вы должны получить такие данные, как
настройки предупреждения компилятора касаются только сообщения о них в консоль, @Juraj
@Juraj это зависит от операции, нужно ему это или нет, самое главное, что ему нужно, последний отпечаток Firebase изменен на 2 августа 2018 года, @abu-ahmed al-khatiri
- ESP8266 не подключается к Wi-Fi
- Каково использование зарезервированных контактов и контактов SDD2, SDD3 NodeMCU?
- Обнаружение ESP8266 в сети
- NodeMCU продолжает отключаться
- Соединение сетей Wi-Fi на nodemcu: как настроить esp8266 в качестве расширителя Wi-Fi, простейший случай
- Как связать MPU9250 и NodeMcu?
- Как изменить тайм-аут загрузки ArduinoOTA?
- ESP8266 Одноранговая сеть с AP и STA — кэширование клиентов AP, очистка их запросов?
Спасибо Majenko, постараюсь сделать сильную ссылку, обновленную временной, и верну ее скорее?, @AMAN77
@AMAN77 Это исправит эту проблему - но, как я уже сказал в своем ответе, если она существует, скорее всего, существуют и другие скрытые, коварные проблемы аналогичного характера., @Majenko