Open aurusov opened 10 years ago
Лучше к комментарию коммита добавить #10
. Исправить последний коммит довольно легко. Тесты на дженкинсе прошли (хотя бы одни из 6-ти) ?
Это еще не тестил, у меня не прошли четыре модели с предыдущего пуша, сейчас смотрю ошибки. Как тут тесты пройдут, отпишу.
Умеешь смотреть дифы для сломавшихся моделей ?
Нет, не умею. Как это делается? Я уже вроде нашел ошибку, но мне всё равно интересно.
Upd: исправил сообщение.
похоже, рефакторинг интерфейса всё-таки что-то сломал, потому что как раз не прошли тесты:
The following tests FAILED:
5 - test_runtime_array (Failed)
9 - test_runtime_matrix (Failed)
Немного странно, у меня модели запускаются и работают нормально. В пошаговой отладке обычных моделей заходят в правильные методы и возвращают в правильные строки. Я так понял, это тесты из папки test проекта. Какими результаты работы должны быть, там написано, а как мне можно узнать результаты, которые выдаются в моей сборке?
PS: ошибки в тех четырех моделях я исправил.
Я уже вроде нашел ошибку, но мне всё равно интересно.
Чуток позже, завал на работе.
The following tests FAILED:
Это boost-юнит-тесты
В общем, дело вовсе не в том, что asString() возвращает что-то не то, а в том, что возникает segmentation fault.
Когда я прогоняю обычные модели с массивами, ошибки почему-то не возникает. Но когда я, например, создаю вложенный ресурс и у него запрашиваю asString() эта ошибка возникает снова, причем будто на попытке вернуть m_object умного указателя.
То ли я сделал неправильный интерфейс, то ли какие-то конфликты с rdo::intrusive_ptr_interface_wrapper
. Я не могу понять, в чем дело.
Еще вопрос: как мне запустить test_runtime_array, ведь у него свой main.cpp? Надо как-то по-другому собирать проект?
Я уже вроде нашел ошибку, но мне всё равно интересно.
Пусть, к примеру, не проходит тест модели event_only. Находишь ее в Сборочной директории.
http://rdo.rk9.bmstu.ru:81/view/bogachev-pa_dev/job/rdo-studio-bogachev-pa-dev-ubuntu-14-04-x86-debug/ws/models/test/event/event_only/
Выкачиваешь архив (Все файлы в архиве ZIP)
, с помощью diff
'а сравниваешь эталоны
simpleModelEventOnly_etalon.trc
vs simpleModelEventOnly.trc
simpleModelEventOnly_etalon.trc
vs simpleModelEventOnly.trc
Путаешься по ним понять ошибку. Если непонятно, то можно запустить РДО в режиме отладки с этой моделью.
Еще вопрос: как мне запустить test_runtime_array, ведь у него свой main.cpp? Надо как-то по-другому собирать проект?
project -> Properties -> Build -> Make -> Build Command -> дописать test_runtime_array
В пошаговой отладке теста с массивами уже при попытке сделать asString->
происходит то же, что я наблюдал с ресурсами. Причем первые 5-6 тестов он проходит и возвращает правильные значения, а потом на одном из последующих крашится. При этом дебаггер пытается пройтись по деструкторам объекта и падает на segmentation fault. Пока что теряюсь в догадках, из-за чего.
Видимо, обращение по нулевому указателю.
Проблема возникает, когда имеем дело с итераторами. Например, c RDOArrayValue всё ок, а RDOArrayIterator падает. Я думаю, это из-за того, что я через IAsString отнаследовал итератор от rdo::counter_reference. Это, видимо, очень плохо и причина всех поломок.
Но как тогда реализовать интерфейс IAsString в итераторе?
Странно, надо самому дебажить. Сейчас не могу. Попробуй
class RDOArrayIterator
: public RDOType
, public IAsString
, public virtual rdo::counter_reference
Удивительно, но тесты проходят под виндой! Я только сейчас заметил.
Там падение из-за того, что две модели 'недопочинились'.
MODEL WITH ERRORS:
../models/test\event\undef_event\from_evn\from_evn.rtestx
../models/test\resource\unknown\DZ.rtestx
Я уже выяснил, в чем проблема. Это те модели, которые должны выдавать ошибки. В моей сборке они тоже выдают ошибки, но другие. Это происходит из-за того, что поменялся порядок сверток в грамматике (из-за param_full_name
) и теперь мы раньше натыкаемся на ошибку неизвестного идентификатора, чем на те, которые там ожидаются.
Ошибки, выдаваемые в моей сборке, корректные, я проверял.
Что вообще в такой ситуации делать?
Именно поэтому так много тестов. И уже есть пример, что их мало. Не хватает еще двух ubuntu x64 debug/release.
По моделям. Сделай форк от моделей, внеси необходимые изменения, настрой на свой форк дженкинс.
Если откатить все изменения только из rdo_value.cpp (https://github.com/bogachev-pa/rdo_studio/commit/e5d1058d96f8df5a90dc35165483ffc8156fbf21#diff-f266519bdab861c4f84168a84f117229L1023), то никаких падений не наблюдается и все тесты правильно проходят. Это минимум того, что можно откатить. Пушить это в dev?
Да
UnknownPointer удален. Теперь нужно свести интерфейс IAsString к INotify, к примеру, и спокойно использовать в RDOValue:
Как-то так.