Странный баг в IDE

Доброго времени!

Попытаюсь объяснить проблему, сам бы не поверил))
Есть достаточно большой проект, подключено много библиотек. Все компилируется. Далее добавляю между библиотеками 3 пустые строки (3 раза жму Enter), получаю ошибку компиляции Compilation error: TimeAlarms.h: No such file or directory (название библиотеки здесь не имеет значения).
Смотрю лог компиляции

D:\Master_2.13.ino:91:10: fatal error: TimeAlarms.h: No such file or directory
   91 | #include <Adafruit_SleepyDog.h>
      |          ^~~~~~~~~~~~~~
compilation terminated.
Alternatives for Adafruit_SleepyDog.h: [Adafruit SleepyDog Library@1.6.0 Adafruit SleepyDog Library@1.6.0]
ResolveLibrary(Adafruit_SleepyDog.h)
  -> candidates: [Adafruit SleepyDog Library@1.6.0 Adafruit SleepyDog Library@1.6.0]
exit status 1

Compilation error: TimeAlarms.h: No such file or directory

То есть, по мнению компилятора ошибка в 91 строке. Но у меня она другая))), в этой строке
подключается библиотека TimeAlarms, а не Adafruit_SleepyDog

Как будто что-то где-то кэшируется, только я не могу найти где. В папке AppData\Local\arduino\sketches удалял временную папку, это не помогло.
Никто не сталкивался с подобным?
Arduino IDE 2.3.6

Ну, так не добавляйте три пустые строки. :neutral_face:

В вашем коде идут директивы препроцессора #if DEFINED … #elif#endif

На момент компиляции в вашем скриншоте для некоторых компиляторов 96 и 97 строки, например, не существует при определенном значении TEENSYTYPE.

Упрощайте проект до минимума инклюдов еще воспроизводящих ошибку. Далее читайте инклюды стоящие перед ошибочной строкой. Может влиять содержание, порядок включения.

Еще я заметил, что для некоторых случаев изменения в *.ino воспринимаются на один шаг позже (как раз может оказаться промах не на ту строчку). Пока не разбирался. Я использую этот файл как проектный, логики в нем не держу, поэтому данное поведение не сильно мешает. Просто учитываю.

Ну так я значения директив не менял, ничего не делал, только добавил пустых строк.

Помогло пересохранить проект. Но это все очень странно

И-и-и.., теперь этот баг отсутствует?

да, все компилится если не трогать порядок строк с подключением библиотек. Но если опять что-то передвинуть, опять приходится пересохранять. :man_facepalming:

А полный лог ошибок можно увидеть?

И, так-же, полный лог.

В этом IDE столько странных багов, что одним больше, одним меньше …

Мы тут уже обсуждали и то, что строки переносить в объявлении шаблонов нельзя, и то, … ой, задолбало уже! Всё началось с того, что авторы вознамерились сделать IDE для блондинок (можно функции заранее не объявлять и т.п.) и полезли грязными руками в код. Но эта работа (правка кода) по сложности сравнима с написанием синтаксического анализатора, а они рубанули “по простому”, вот и расхлёбывайте.

1 лайк

Итого:

Или ТС надоть сообщить раздработчикам? Отож может они не в курсе?

а что значит “пересохранять” - просто нажать Save или сохранить как новый скетч с новым именем?
Просто если Save - так оно вроде и так автоматически сохраняется перед компиляцией

пересохранить как новый

встряну со своей унылой идеей: нет смысла анализировать как именно глючит, достаточно знать как сделать чтобы не глючило. Ибо норм путь обычно один, а глючных море.

3 лайка

Вот я и сижу на 1.8.19 + Notepad)))

1 лайк

это нормально. Я сижу на старой операционке на маке и зафакали предложениями срочно! обновиться. Ага, сразу софт начнет требовать обновления и тп…

1 лайк

Я заметил такую вещь в Arduino IDE - когда начинаешь раскидывать свой проект на несколько файлов, то проект может перестать собираться. Но стоит переместить инклюды используемых библиотек в главный скетч, то проект опять собирается.

Например, вынес логику, ответственную за общение по mqtt в файл mqtt.ino со всеми инклюдами и всё, проект не собирается с кучей непонятных ошибок, хотя пол часа назад всё работало. Вернул #include <AsyncMQTT_ESP32.h> в главный скетч, удалив его в mqtt.ino - всё компилируется и работает нормально.

Не всегда вынесение инклюдов в другие файлы ломает проект, но очень часто

Это не особенность ИДЕ, это вы просто не знаете принципов сборки проекта из нескольких файлов.

Начать с того, что для уменьшения гемора файл .ino должен быть только один, а остальные - .c .cpp .h

3 лайка

А вы знаете эти принципы? Если да, то изложите для несведущих, или укажите, где о них можно почитать?

Это ваше мнение или правило?

мнение

Проект может состоять из нескольких ino. В каких то случаях это удобно.
А вообще, Ардуино IDE - это костыль для компилятора и для сборки. И, хотя он уже достаточно вылизан, но, как у каждого костыля, у него случаются траблы.