Перейти к содержанию

JustMe

Сталкеры
  • Публикаций

    41
  • Зарегистрирован

  • Посещение

Информация о JustMe

  • Звание
    Новичок

Посетители профиля

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

  1. Наиграл около 5 часов, вылетов не было. На всякий случай прилагаю лог (есть warning'и). log.7z
  2. Пока только "add_dependency", наиграл где-то 4 часа. Кстати, пси-арты так и не влияют на пси-шкалу. А вот разрыв действительно отображается. log.7z
  3. Вылет при переходе с Затона на Юпитер. Не воспроизводится. log.7z
  4. Спасибо, пригодится. Главное, их же прикладывать к любому дополнительно выкладываемому бинарнику. Не, я пока так помучаюсь Значит, идея по поводу отлавливания add_dependency-бага: уничтожаемый object_rep (файл luabind/detail/object_rep.hpp) содержит поле m_classrep типа class_rep, доступное через метод crep(). В свою очередь, class_rep (файл luabind/detail/class_rep.hpp) содержит поле m_name, доступное через метод name(). Добавляем в функцию destroy_instance (файл src/object_rep.cpp) try..catch вокруг строки 83 (instance->~object_rep()), из catch в лог нужно вывести instance->crep()->name(). Так мы хотя бы узнаем, какой именно C++ класс глючит (если, конечно, он один). А заодно это предотвратит и вылет (вероятно, ценой протечки); ну или можно сделать throw, чтобы вылет таки случился. Единственный неприятный момент, видимо, состоит в том, что luabind понятия не имеет о системе логгирования Сталкера, так что придётся что-нибудь колхозить (проще всего родить собственный лог).
  5. Могу попросить PDB для LuaJIT? А лучше сразу для всего, без них толком ничего не понятно. Словил уникальный вылет: log.7z Да, ещё замечания: порядок кусков "историй у костра" перепутан: сперва идёт последний, за ним первый и прочие характеристики "Севы" и "Севы-2" идентичны Дополнено 11 минуты спустя Ковыряние LuaJIT, по сути, ничего не дало. Прилагаю очередной типовой лог вылета. Цепочка вызовов внутри LuaJIT такова: lua_pushlstring->lj_gc_step->gc_onestep->gc_finalize (из ветки GCSfinalize)->gc_call_finalizer->lj_vm_pcall. Один шаг пропущен, поскольку я не нашёл в исходниках lj_vm_pcall (должен быть на асме), но и так всё предельно понятно: GC грохнул некую переменную (обслуживаемую luabind), в которой лежала ссылка на C++ объект и которая, соответственно, на момент уничтожения была уже забагована. Возможных причин просто море. Вопрос: насколько много обёрнутых C++ объектов (подлежащих уничтожению в процессе игры) используется в lua-скриптах Сталкера? log_dep.7z
  6. Опять словил якобы add_dependency(). Поковырялся IDA'ой и выяснил, что падает вовсе не add_dependency(), а luabind::detail::destroy_instance на строке 83 (ручной вызов деструктора): Вероятно, проблемы с object_rep* instance (он берётся в самом начале, но до вызова деструктора не используется, поэтому падает только там). Могу поковырять ещё LuaJIT, но мне нужна ссылка на её исходники.
  7. Засунь содержимое add_dependency в try..catch, из catch выведи в лог переданные параметры. Ну и даже на кривых параметрах хороший код падать не должен, так что add_dependency тоже "виновата". Дополнено 47 минуты спустя Не помню, выкладывал такой вылет или ещё нет. Довольно часто возникает при попытке обыска трупов. log.7z
  8. Нет, всё тот же вылет. На всякий случай: исходники luabind берёшь отсюда? log.7z
  9. Вот тот же вылет. Собственно, вылетает-то luabind, а не luajit. log.7z
  10. Вылет сразу же в начале загрузки сохранения. log.7z
  11. Опять же, старый вылет. Возник при нажатии на F9. Рандомный. И вообще странный: каким образом из ucrtbase.free может вызваться ntdll.RtlAnsiStringToUnicodeString? Может, он логгирует чего? Хотя нет, странность-то в другом: вылет произошёл в ntdll.RtlAnsiStringToUnicodeString. То есть ошибка именно в ucrtbase.free. Да, возможно, ей был передан глючный указатель, но ошиблась функция именно при логгировании. Для справки: у меня Windows 7. log.7z Дополнено 48 минуты спустя Вылет при переходе с Юпитера на Затон. Конечно, рандомный. Всё тот же самый luabind::detail::object_rep::add_dependency(), на сей раз из сборщика мусора. log.7z
  12. Нет, просто бежал. Дополнено 48 минуты спустя Кстати, вылетает и просто при выходе. Там ещё странности в логе есть, какие-то взаимоотношения с электроаномалией и кошкой, если я правильно понял (по всему логу), и тот же баг с владением пушкой (на 00:53:43.586, но вылета по нему не было). log.7z
  13. А вот и первый вылет (он уже был, и остался): log.7z
  14. Увы, рандомный. Дело было так: зашёл в Мёртвый Город, там стандартный мордобой наймов с бандюками и монолитовцами. Пока я бегал по тайникам, наймы победили и пошли лутать трупы, ну и я тоже к ним присоединился. И вот мы с наймом бежим к одному и тому же трупу, подбегаем почти одновременно, я тыкаю на обыск и ловлю вылет. Ну и да, такое впечатление, что найм успел стырить LR-300 трупа в то время, когда мне передавался список лута. Что странно, поскольку пушка или валялась на земле (и тогда труп ею уже не должен владеть, верно?), или же была в трупе, но неписи обычно обыскивают несколько секунд, а тут этого не было. После перезагрузки найм к трупу уже не пошёл.