zHz00 Untitled

понедельник, 05 сентября 2022
04:29 Ошибки компилятора
Если программировать достаточно долго, то рано или поздно на них наткнёшься. Ошибки в компиляторах редкость, но иногда они всё же есть. Нахождение такой ошибки -- целое событие. А искать её можно очень долго. Это самые поганые ошибки, потому что компилятор -- последнее, на что думаешь, когда что-то идёт не так. Но сбрасывать его со счетов нельзя.

В одних компиляторах ошибок больше, в других меньше. Часто жалуются на ошибки в компиляторе для PIC32.

У меня было две ситуации.

Первая оказалась багом интерактивного отладчика, а не компилятора. Суть бага была в том, что я присваивал переменной значение, а оно при наведении мышкой не отображалось (отображалось старое или вообще постороннее). Всё работало правильно, но на ходу я не мог посмотреть значения переменных. ОКАЗАЛОСЬ, что отладчик иногда неверно находил адрес переменных. Он считал, что переменная расположена в регистре процессора, и отображал значение оттуда. А переменная на самом деле располагалась в памяти. Долго я думал, что дело в компиляторе, поэтому путём махинаций менял расположение переменных. После этого отладчик начинал воспринимать адреса правильно и всё показывать.

Вторая ситуация произошла недавно, и я так и не знаю, что это было и в чём причина. Функция математической обработки работала правильно год или два, но внезапно стала выдавать дичь. Несколько часов отладки выдали удивительный результат. ОКАЗАЛОСЬ, что float-значение, передающееся через параметр, не доходит до внутренностей функции. На входе никель, а на выходе -- пуговица. Конкретнее, я передаю, скажем, 5.0f, а в начале выполнения функции в переменной находится -3.2e19f. Это просто непостижимо. Я убрал все вычисления, все преобразования типов, стал просто передавать в функцию число -- но это не помогло. Я залез в дизассемблер, но увидел там фигу, потому что ассемблера PIC32 я как раз и не знаю (этот пробел надо восполнить; код вызова я сохранил). После некоторых колебаний я заменил аргумент с типа float на long double, тем более что все вычисления делались именно с long double. И... всё заработало.

Это однозначно указывает на ошибку компилятора, но что конкретно происходит, почему, и при каких условиях -- я пока не знаю.

@темы: Программирование, Борьба с техникой

URL
http://www.donotenter.com/cool/sign...ts_of_nots.html ...
"Когда я наконец приучил себя к мысли, что погода не...
Да, как там - Мне нож по сердцу там, где хорошо, я дома т...
Интересные паралелли с родиной встречaешь иногда в Корее....
Пусть живет здесь... Советую, кто не читал. Паоло Коэль...
Тот дождь показался мне таким необычным. Было ощущение сн...

05.09.2022 в 12:30

05.09.2022 в 12:30
Для такого нужен новый тэг - zHz Bizarre Programming Adventures.
URL

05.09.2022 в 18:39

05.09.2022 в 18:39
> компилятор -- последнее, на что думаешь
а как же ошибки в процессоре?)
URL

05.09.2022 в 20:05

05.09.2022 в 20:05
RetXiRT suiR@ttig@$, это повседневность.
Xersareeth, ошибки в процессоре должен учитывать компилятор. Если компилятор этого не делает, то это ошибка компилятора.
URL

05.09.2022 в 20:22

05.09.2022 в 20:22
zHz00, а ошибки в компиляторе должен учитывать... zHz! =P
URL

05.09.2022 в 20:48

05.09.2022 в 20:48
Xersareeth, именно! Увы, если в компиляторе ошибка, то либо переходить на другой (другую версию), либо использовать обходные пути.
URL

06.09.2022 в 11:22

06.09.2022 в 11:22
Ну дык для Жожей это тоже повседневность. А для тех, кто не обладает такой силой (intended) - очень даже себе приключения.
URL

07.09.2022 в 13:23

07.09.2022 в 13:23
А что там в PIC32, MIPS стоит?
URL

07.09.2022 в 14:54

07.09.2022 в 14:54
Стороной, да.
URL

07.09.2022 в 15:40

07.09.2022 в 15:40
zHz00, м. Не считая слота задержки, ассемблер довольно классический...
URL

07.09.2022 в 16:15

07.09.2022 в 16:15
Стороной, чё почитать для введения? А не для введения?
URL

07.09.2022 в 17:37

07.09.2022 в 17:37
zHz00, а чёрт его знает... Я просто по работе знаком с архитектурой MIPS, так вышло. :) Применительно к микроконтроллерам, думаю, на самом сайте должно быть что-то из доков... Не MIPS architecture ж читать, там лишнего много....
URL

07.09.2022 в 18:11

07.09.2022 в 18:11
Стороной, ооо, можно будет к тебе с вопросом обратиться, если возникнет?
URL

07.09.2022 в 23:06

07.09.2022 в 23:06
zHz00, ага, конечно.
URL
Добавить комментарий

Расширенная форма

Подписаться на новые комментарии
Получать уведомления о новых комментариях на E-mail