Русское сообщество по скриптингу

Отладка hlds

Статьи или фрагменты кода для новичков и уже опытных скриптеров по AMXX.

Модератор: Chuvi

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только обучающему материалу по AMX Mod X.

Отладка hlds

Сообщение ko22009 » 09 мар 2017, 10:05

Бывает ситуации, когда из-за незнания того, как устроен движок hlds, rehlds, regamedll...
у нас непредвиденно вылетает сервер, уведомляя только лишь, что прекращена работа hlds.exe

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

Чтобы понять, почему эта ошибка произошла, нам необходимо заняться отладкой приложения.
Так как у меня windows, я продемонстрирую как это делается для нее.
1) Скачиваем visual studio, express, например.
2) Затем запускаем сервер.
3) Проделываем вещи, которые вызывали прекращение работы сервера.
4) После появится окно об ошибке, нажимаем отладка.

5) Затем на кнопку Yes и попадаем в visual studio. Нажимаем на кнопку break.

6) Для того, чтобы увидеть, в какой строчке кода сервер ложится, нам нужно скачать исходники к тому, что мы хотим дебажить, а точнее к последнему, так как упал именно он.

7) mp.dll в окне call stack, в моем случае это regamedll. Скачиваем с github исходники к regamedll.
8) Что-то типо такого будет, когда необходимо задать исходник. Указываем исходник и в call stack еще раз нажимаем на последнюю строчку.
9) Попадаем на тот участок кода, который у нас вызвал проблему.
У нас вызывается UTIL_ResetEntities() при каждом рестарте сервера, а if (pEntity->IsPlayer()) вызывает ошибку, так как у pEntity нет свойства IsPlayer. Получается что функция автоматически очищает созданные объекты пользователя после рестарта, но сейчас она это сделать не может. Так как наблюдается конфликт удаление объекта при рестарте и при ручном удалении объекта.

10) Теперь ищем проблему у себя в коде.
Оказывается, что при перезагрузке мы удаляли объекты, поэтому движок не смог их удалить нормально, так как мы уже это сделали сами два раза.
11) Нужно разрешить проблема с удалением объектов. Когда find_ent_by_class выводит объект, который уже был удален.

P.S. Ошибка оказывается была не в уничтожении объекта, а неверное назначение смещения. offset, там было для linux. set_pdate
Последний раз редактировалось ko22009 09 мар 2017, 11:46, всего редактировалось 3 раз(а).
Аватара пользователя
ko22009
 
Сообщения: 127
Зарегистрирован: 19 янв 2017, 16:20
Благодарил (а): 12 раз.
Поблагодарили: 25 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn
C++
Php
Python
C#

Re: Отладка hlds

Сообщение Chuvi » 09 мар 2017, 10:44

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

"Незнание английского языка - это ваша проблема."

Плагинами на заказ не занимаюсь. Своих дел хватает.
Аватара пользователя
Chuvi
Модератор
 
Сообщения: 2253
Зарегистрирован: 24 ноя 2011, 08:03
Благодарил (а): 127 раз.
Поблагодарили: 561 раз.

Re: Отладка hlds

Сообщение Subb98 » 09 мар 2017, 10:57

Лучше расскажите, как правильно собирать и читать дампы, как на Windows, так и на Linux.
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
Аватара пользователя
Subb98
Модератор
 
Сообщения: 4824
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1272 раз.
Поблагодарили: 2184 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn, PHP

Re: Отладка hlds

Сообщение ko22009 » 09 мар 2017, 11:56

Аватара пользователя
ko22009
 
Сообщения: 127
Зарегистрирован: 19 янв 2017, 16:20
Благодарил (а): 12 раз.
Поблагодарили: 25 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn
C++
Php
Python
C#

Re: Отладка hlds

Сообщение Subb98 » 09 мар 2017, 12:57

ko22009, наверное, я не имел с этим дела. И такой материал, уже на примере HLDS, был бы очень полезен.
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
Аватара пользователя
Subb98
Модератор
 
Сообщения: 4824
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1272 раз.
Поблагодарили: 2184 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn, PHP

Re: Отладка hlds

Сообщение lop50956 » 09 мар 2017, 14:18

Красота. Немного даже годнота.
Аватара пользователя
lop50956
 
Сообщения: 178
Зарегистрирован: 29 ноя 2016, 00:36
Забанен
Благодарил (а): 18 раз.
Поблагодарили: 16 раз.
Опыт программирования: Больше трех лет
Языки программирования: Php


Вернуться в Статьи / фрагменты кода

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

cron