Исключение First-chance exception at 0x76FEDDC5 (ntdll.dll) in XR_3DA.exe: 0xC0000005: Access violation reading location 0x008B4C8F. возникает в HeapWalk в memory_usage.cpp:73, сразу после того как цикл с heap_walk нашел " якобы свободный блок". т.е. это получается, что некто выделил блок памяти, а потом удалил указатель на этот блок без освобождения самого блока? я пытаюсь понять, что хоть искать...
Giperion
22.06.2016, 19:48
Цитата(Neo][ @ 22.06.2016, 13:43)
Попробуй запустить с ключом: -pure_alloc, хотя бы исключить влияние xray-евских мем пулов, но это вряд ли поможет )
Вот эта опция, и еще включенный Memory Monitor самого XRay'я + сообщение от винды когда невалидную ноду находит, достаточно чтобы локализовать проблему.
Цитата(abramcumner @ 22.06.2016, 14:28)
Насколько я помню, в функции heap_walk ошибка - неправильно работают с апи. Cохраняются не все данные PROCESS_HEAP_ENTRY между вызовами HeapWalk.
Поподробнее можно? Я ничего криминального там не заметил, хотя я так и не понимаю, почему не сделали вызовом напрямую HeapWalk, а вызывают какую то оберточную шнягу.
Winsor, я сегодня вечером приду, для чистоты эксперимента перепишу участок кода с использованием HeapWalk напрямую. Если у тебя и с ним упадет - значит точно косяк где то в памяти.
Winsor
22.06.2016, 20:23
-pure_alloc - ошибка такая же, более явной не становиться, стек вызовов такой же, как и без нее.
_HEAPBADNODE возвращается в трех случаях 1) не прошел HeapValidate на занятой ноде 2) если HeapWalk вернул ошибку 3) если в HeapWalk было исключение - вот это мой случай... теоритически - я могу найти невалидную ноду но как определить - кто ее выделил, и чем именно она неправильная? тут у меня знаний работы с кучей не хватает... Giperion - спасибо, буду ждать. а через обертку - потому что сама обертка вызывается из нескольких мест, я про mem_usage_impl.
John_Wick
26.06.2016, 12:39
Привет всем ребят есть у кого исходники ТЧ на Visual Studio 2015
Northern Maverick
05.07.2016, 09:07
У меня вопрос.
Кто-то упоминал о желании прикрутить к движку Intel`овскую технологию TBB. Попытка была? Получилось? Удалось граф задач расписать?
Буду признателен за ответ.
Giperion
05.07.2016, 12:26
Цитата(Northern Maverick @ 05.07.2016, 09:05)
У меня вопрос.
Кто-то упоминал о желании прикрутить к движку Intel`овскую технологию TBB. Попытка была? Получилось? Удалось граф задач расписать?
Буду признателен за ответ.
А смысл? У X-Ray есть CPU pipe с похожим функционалом, так эту систему движок почти не использует. Просто подключить не проблема, а вот переверстать xrGame на задачи - очень трудно. В игре Метро это сделали (те же прогеры, что X-Ray написали).
Northern Maverick
05.07.2016, 12:52
Спасибо. Интересно.
macron
05.07.2016, 12:57
Цитата(Northern Maverick @ 05.07.2016, 10:05)
прикрутить к движку Intel`овскую технологию TBB.
Я в OLR и 2.0006 через батники с psexec.exe прикручивал лучшее распределение нагрузки по ядрам.
Northern Maverick
05.07.2016, 13:01
macron А какая технология использовалась? Если есть название и нет секрета (засады, клятвы, тайника, обета молчания и т.п.) :-) ?
Судя по отсутствию ответа, ответ уже был дан. Значит батники просто (или непросто) настраивали psexec.exe. Помню, что действительно в теме был ответ с упоминанием этого инструмента. Ок. Понял.
Neo][
05.07.2016, 13:17
Цитата(macron @ 05.07.2016, 14:55)
Я в OLR и 2.0006 через батники с psexec.exe прикручивал лучшее распределение нагрузки по ядрам
macron, скорее лочил возможность потоку выполняться на определённых ядрах.
Да и к тому же "красивый" график загрузки ядра не говорит о том, что оно эффективно используется: https://msdn.microsoft.com/en-us/library/wi...p/ms685096.aspx Применительно же к xray, последовательная система не может работать параллельно, это концептуальный момент
Northern Maverick
05.07.2016, 13:28
Neo][
Жаль, что параллелизм будет паллиативным, но что делать.
macron
05.07.2016, 13:36
Цитата(Neo][ @ 05.07.2016, 14:15)
скорее лочил возможность потоку выполняться на определённых ядрах
Типа того. Например, на четырехядерном говорим задаче выполняться на трех:
@cd bin @psexec.exe -d -a 1,2,3 xr_3da.exe
Neo][
05.07.2016, 13:48
Цитата(Northern Maverick @ 05.07.2016, 15:26)
Жаль, что параллелизм будет паллиативным, но что делать.
Northern Maverick, тут ни о каком решении вообще речи не идёт. Все эти affinity mask предназначены для очень тонких моментов, связанных с кэшами старших уровней, либо для каких-то аппаратных вещей, когда необходимо выполнение именно в контексте определённого ядра.
Для всего остального есть планировщик винды, имеющий нетривиальный алгоритм, учитывающий кучу факторов. И делает свою работу он замечательно.
Giperion
05.07.2016, 14:34
Цитата(macron @ 05.07.2016, 13:34)
Цитата(Neo][ @ 05.07.2016, 14:15)
скорее лочил возможность потоку выполняться на определённых ядрах
Типа того. Например, на четырехядерном говорим задаче выполняться на трех:
@cd bin @psexec.exe -d -a 1,2,3 xr_3da.exe
А зачем его так ограничивать? По умолчанию процесс игры (и все задачи) выполняются на всех ядрах. ОС берет на себя задачу распределения потоков на ядра процессора, и вполне неплохо справляется с этой задачей.
macron
05.07.2016, 15:54
Цитата(Giperion @ 05.07.2016, 15:32)
ОС берет на себя задачу распределения потоков на ядра процессора, и вполне неплохо справляется с этой задачей.
Я пока могу судить конкретно по XP. Без батника попеременно загружены два ядра, с батником параллельно еще третье. Кто может производить более точные эксперименты/тесты - флаг в руки.
Northern Maverick
05.07.2016, 16:19
Не встречал в этой теме (не приходит на память), чтобы кто-то отчитывался о работе с профилировщиком. Ведь наверняка кто-то смотрел под профилировщиком раскладку по функциям движка, памяти , загрузке ядер процессора...
Giperion
05.07.2016, 17:54
Цитата(Northern Maverick @ 05.07.2016, 16:17)
Не встречал в этой теме (не приходит на память), чтобы кто-то отчитывался о работе с профилировщиком. Ведь наверняка кто-то смотрел под профилировщиком раскладку по функциям движка, памяти , загрузке ядер процессора...
GSC подключали Intel VTune, учитывая макросы _forceinline и комментарий рядом с ним, они профилировали движок и самые жесткие косяки убирали. Я тоже его использую вместе с VS Profiler который в 2015 версии есть.
Единственное что: руки не доходили до компиляторов, gsc судя по всему тоже. Запрофилирую их как нить на досуге.
Алсо, проблема с битыми группами сглаживания все еще актуальна?
Cossack-HD
05.07.2016, 18:01
Цитата(Giperion @ 05.07.2016, 19:52)
Цитата(Northern Maverick @ 05.07.2016, 16:17)
Не встречал в этой теме (не приходит на память), чтобы кто-то отчитывался о работе с профилировщиком. Ведь наверняка кто-то смотрел под профилировщиком раскладку по функциям движка, памяти , загрузке ядер процессора...
GSC подключали Intel VTune, учитывая макросы _forceinline и комментарий рядом с ним, они профилировали движок и самые жесткие косяки убирали. Я тоже его использую вместе с VS Profiler который в 2015 версии есть.
Единственное что: руки не доходили до компиляторов, gsc судя по всему тоже. Запрофилирую их как нить на досуге.
Алсо, проблема с битыми группами сглаживания все еще актуальна?
Sharp/soft edges? При каждом упоминании этой проблемы приходит какой-нибудь модельщик и кричит "ДА ПОЧИНИТЕ УЖЕ ЭТО!"
Giperion
05.07.2016, 18:10
Цитата(Cossack-HD @ 05.07.2016, 17:59)
Sharp/soft edges? При каждом упоминании этой проблемы приходит какой-нибудь модельщик и кричит "ДА ПОЧИНИТЕ УЖЕ ЭТО!" laugh.gif
Вот как? Вообщем я её недавно починил. Очень забавно вышло кстати, расскажу как нибудь. В этом месяце выложу, там еще с THM правка и еще какая то дичь. Тут еще проблема в том, что у меня уже бинарный формат модели другой, надо будет дописать код для формата Зова Припяти, и наверное Тень Чернобыля тоже. А вообще с THM я планирую утилитку написать.
Northern Maverick
05.07.2016, 18:10
Giperion Спасибо за ответ. Если будет информация по профилированию компилятора, и будет не жалко поделиться ею, буду признателен.
RayTwitty, ну, тогда надо смотреть, как применяешь. У них же есть 2 ридера конфигов: script и inifile(названия не точные - не помню), один на r_bool возвращает BOOL(что есть int на винде), а другой bool.
Кстати, не приведет ли это к увеличению числа операций? Или оптимизация выпилит? Зачем вообще нужно это самое BOOL, если есть bool?
mortan
09.07.2016, 00:37
пробовал кто новые итемы добавить?)Я тут хочу конт для артов сделать,ибо скриптами не айс. Делал ли кто-нить подобное,поделитесь опытом)
mortan
09.07.2016, 21:31
получилось сделать,только вот не могу понять почему предметы внутри не сохраняются при сохранении игры)Для того чтобы его в рюкзаке таскать можно было сделал копию inv_box без онлайна и оффлайна. Тыкните плиз где можно поправить эту проблемку
mortan
10.07.2016, 20:33
ещё немного поковырял и пришёл к выводу,что у меня не спавнятся чилды для объекта(в данном случае контейнер).Помогите пожалуйста
Neo][
10.07.2016, 20:53
Цитата(RayTwitty @ 09.07.2016, 00:27)
Кстати, не приведет ли это к увеличению числа операций? Или оптимизация выпилит? Зачем вообще нужно это самое BOOL, если есть bool?
RayTwitty, конкретно про BOOL - наследие С и винды в частности. В С нет типа bool. Конкретно про xray - хз зачем BOOL. Лишняя инструкция в ассемблере скорее всего появится, но это не столь критично.
mortan, так всётаки не спавнятся или не сохраняются? Писал ли кастом код сериализации своего объекта?
mortan
10.07.2016, 21:26
Neo][,я не уверен что всё сохраняется,но когда включил логирование в консоль при сохранении игры то там идёт сохранение и ящика,и предмета.Но при загрузке игры ящик пуст.
Вот моё же сообщение с амк форума
Делал на основе InentoryBox,но в оригинале он CGameObject,а у меня относится к предметам из инвентаря (CInventoryItem).В чем суть проблемы: при переходе на другую локацию и обратно вложенный предмет в контейнер лежит рядом на земле.Это еще пустяк,но вот если при переходе контейнер лежит в инвентаре то содержимое испаряется,правда при выходе из игры в момент уничтожения объектов игра вылетает с жалобой на отсутствие дочерних элементов.Вот лог ошибки:
Лог ошибки
[error]expression : child [error]Function : xrServer::Perform_destroy [error]File : xrServer_sls_clear.cpp [error]Line : 22 [error]Description : child registered but not found [1002]
Такая же ошибка появляется если сохранить игру и тут же загрузить этот сейв.При сохранении вещи в конте не сохраняются( Я грешу на то что возможно проблемы связаны с булами m_cont_use и m_close
Правда я читал что CGameObject вообще для всего в игре используется) Насчёт сериализации мне бы найти где она в оригинале.То что я находил вообще для всех объектов используется,я не нашёл где AlifeItem сохраняется)
mortan
11.07.2016, 02:24
Вот все мои правки
Вот мои правки+gamedata+bin.Я немного не понял всю эту систему сохранения из-за обилия пакетов.Если кому интересно то вот можете скачать и повторить.Игра CoP версии 1.06.2 Мои правки можно смело накатить на branch master из open xray,я на основе его и делал.
ColR_iT
12.07.2016, 20:50
Кто-то, кто владеет плюсами и работал/работает с исходниками, скажи, пожалуйста, если ли возможность вернуть список всех методов доступных из Lua, сгруппированных по принадлежности к игровым объектам?
RayTwitty
12.07.2016, 23:37
ColR_iT, разве что вручную. Все функции разные, в некоторых используется более одного объекта. Автоматической системы, которая бы определяла над какими типами идет работа - нет.
mortan
13.07.2016, 13:13
Маленький вопросец к тем кто качал с моей ссылки - есть предложения как поправить\дописать?)Я тут ещё пару дней бился головой об стенку,но так и не понял где именно проблема - при спавне объекта или во время сохранения.Тут можно свои мысли на свой вопрос высказывать?)Тыкните уже носом в каком файле эти функции,я может сам тогда поправлю.
ColR_iT
13.07.2016, 21:07
RayTwitty, мне почему-то казалось, что вызов метода движка непосредственно в LuaBind идёт по его имени. Ведь есть же staticMetaObject, да и вообще рефлексия/отражение в языке присутствует. В движке экспорт методов в Lua идёт из строго определённого класса или из каждого типа по отдельности? Нужно получить только имя метода и его сигнатуру (что принимает, что возвращает). P.S. lua_help.script вряд ли в ручную "генерировался".
RayTwitty
13.07.2016, 21:09
Цитата(ColR_iT @ 13.07.2016, 21:05)
В движке экспорт методов в Lua идёт из строго определённого класса или из каждого типа по отдельности?
Нет, там общий класс CScriptGameObject, а уже внутри функции кастуется в какой надо.
Цитата(ColR_iT @ 13.07.2016, 21:05)
P.S. lua_help.script вряд ли в ручную "генерировался".
RayTwitty, да мне безразлично какого он качества. :-) Мне нужен публичный (можно статический) метод в движке, который будет возвращать хотя бы текст, в котором будут все экспортированные методы с сигнатурой, идеально, если они будут сгруппированный (любым удобным/доступным способом) по принадлежности к тому или иному объекту.
-StalkMen-
14.07.2016, 07:28
ColR_iT, Lua_help.script "принтит" консольная команда lua_help.
ColR_iT
14.07.2016, 12:49
Ещё раз повторюсь с вопросом: мне нужен функция в xrGame.dll вида:
Возвращающий хотя бы массив строк (в идеале словарь, кажется тип map или std::pair, в общем любом виде доступном для маршалинга) с именами и сигнатурами методов, которые доступны в скриптах Lua. Саму же функцию ExportMethods я буду вызывать в коде C# посредством DllImport.
K.D.
14.07.2016, 16:48
Так ответили же не раз уже - нету такого в релизном движке. Да и в дебажном только lua_help.
ColR_iT
14.07.2016, 16:50
Костя, то, что такого нет - это я понимал ещё до того, как задал вопрос. Изначально я спросил о возможности написания такой функции.
Neo][
14.07.2016, 17:02
mortan, посмотри следующие методы у других объектов: