Форум Pawn.Wiki - Воплоти мечту в реальность!: Много ошибок debug при загрузке мода - Форум Pawn.Wiki - Воплоти мечту в реальность!

Перейти к содержимому

  • (3 Страниц) +
  • 1
  • 2
  • 3
  • Вы не можете создать новую тему
  • Тема закрыта

[ MySQL ]
Много ошибок debug при загрузке мода

#11
Пользователь офлайн   Danny_Marcelo 

  • Знаток
  • Вставить ник
  • Раскрыть информацию
Вот от кого, от кого, а от Deimos не ожидал такого ответа)) Напишите такое на форуме Corteza и будете посланы на 3 советских.
long_call_time 0
не рекомендуется, т.к. это может привести к нестабильной работе сервера. Тут код оптимизировать весь нужно. Автор темы, если ты скачал мод чтобы поиграть и выбросить, тогда да, можешь их вариант использовать, а если серьёзно как то планируешь использовать, то лучше всё это дело исправлять. Для начала как минимум могу посоветовать поменять плагины и инклуды, мне такое помогало. На более старые версии, обычно пропадают. А в самом моде естественно нужно исправлять. crashdetect просто так ругаться не будет. А если ты воспользуешься их вариантами, то по началу всё будет хорошо, но добавляя всё больше и больше таймеров и циклов, а ты их будешь добавлять, если разрабатываешь новые системы или вырезаешь откуда то, не важно. Со временем ты вернешься на форум с вопросом, почему отключается сервер? Да все как раз таки потому, что скрываешь ошибку, а не исправляешь. По теме, оставь цикл foreach для перебора транспорта, т.к. MAX_VEHICLES считает весь лимит SAMP, то есть 2000 машин от 0 до 2000, у тебя вряд ли в моде 2000 машин. А лучше использовать константу:

#if !defined MAX_VEHICLES
        #define MAX_VEHICLES 100
#endif


Вот тут скорее всего идёт переполнение массива. Переменную глянуть надо.
AddStaticVehicleEx(421,2015.5999800,-1143.3000500,25.0000000,272.0000000,147,147,6000); //Virgo  // ругаться тут начинает


Но лучше используй для каждого т/с отдельную переменную.

grovecars[0] = AddStaticVehicleEx(492,2493.8000500,-1681.1999500,13.2000000,0.0000000,86,86,6000); //Greenwood
        grovecars[1] = AddStaticVehicleEx(492,2489.6001000,-1680.8000500,13.2000000,0.0000000,86,86,6000); //Greenwood
       grovecars[2] =  AddStaticVehicleEx(492,2485.8000500,-1680.6999500,13.2000000,0.0000000,86,86,6000); //Greenwood
        grovecars[3] = AddStaticVehicleEx(492,2475.5000000,-1676.5000000,13.2000000,328.0000000,86,86,6000); //Greenwood
и т.д. 


и саму переменную измени с grovecars[2] на ту, сколько машин заюзал. Допустим grovecars[8]. Это всё я говорю исходя из личной практики использования.

Остальные твои проблемы нужно не один час решать, изучать подробнее твой код. Я тоже еще не всё в pawn знаю, по этому пусть другие тут подмогнут.

Сообщение отредактировал Danny_Marcelo: 19 марта 2025 - 14:02

0

#12
Пользователь офлайн   M I S T E V 

  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияDanny_Marcelo (19 марта 2025 - 14:00) писал:

Нажмите сюда, чтобы прочитать это сообщение. [Показать]


Что за бред? Ты советуешь ему откатить плагины/инклуды к старым версиям? :facepalm:


1. Это НЕ ОШИБКА, это сообщение, что код выполняется дольше, чем определено по умолчанию. Данное время можно изменить или отключить вовсе. И если бы там был выход за пределы массива - об этом написало бы в консоль.

2. Ты вообще мод хоть раз писал какой-нибудь? Когда у тебя куча систем что-то подгружают при включении сервера - это всегда будет вызывать подобное сообщение в OnGameModeInit, особенно, если ты используешь mysql_query, чтобы не плодить паблики для получения инфы.

3. Так уже давно никто не делает, и советовать подобное - не нужно

Цитата

Но лучше используй для каждого т/с отдельную переменную.

grovecars[0] = AddStaticVehicleEx(492,2493.8000500,-1681.1999500,13.2000000,0.0000000,86,86,6000); //Greenwood
        grovecars[1] = AddStaticVehicleEx(492,2489.6001000,-1680.8000500,13.2000000,0.0000000,86,86,6000); //Greenwood
       grovecars[2] =  AddStaticVehicleEx(492,2485.8000500,-1680.6999500,13.2000000,0.0000000,86,86,6000); //Greenwood
        grovecars[3] = AddStaticVehicleEx(492,2475.5000000,-1676.5000000,13.2000000,328.0000000,86,86,6000); //Greenwood
и т.д. 

Все данные заносишь в массив, а через цикл создаёшь всё, что тебе нужно.


Поэтому твоё сообщение лучше удалить, чтобы не путать других пользователей. Вариант с полностью отключаемым временем - не такой плохой, как то, что ты советуешь :no:

Сообщение отредактировал M I S T E V: 19 марта 2025 - 14:18

0

#13
Пользователь офлайн   Danny_Marcelo 

  • Знаток
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияM I S T E V (19 марта 2025 - 14:06) писал:

Нажмите сюда, чтобы прочитать это сообщение. [Показать]


Я просто оставлю это здесь. И вообще гугл в помощь, там разные ситуации у людей бывают. Тут как раз заблуждение. Его мод скорее всего паблик, где +100500 неоптимизированных систем, ты предлагаешь скрыть краши. Тогда чтобы отключить данные сообщение, по твоей же логике, проще от crashdetect отказаться) Нафиг он нужен тогда? Он не просто так указывает строки ошибок. По поводу плагинов и инклудов, откатить до старых советую тоже не просто так. Во первых я как то в моде обновил всё до новой версии, а потом подобные ошибки лезли, вернул назад некоторые и все нормализовалось. Если ты с нуля пишешь мод, то конечно целесообразно использовать все инклуды и плагины последних версий, но мы не знаем какой там мод у автора и сколько лет назад он вообще писался...
По поводу машин, у меня тоже была проблема с подобным кодом, я обратился на форум, мне так советовали "Профессионалы", но на практике и правда ошибка исправилась, так что повторюсь, советую на основе своей практики, а не на бум говорю.
Прикрепленные файлы [Показать]

Сообщение отредактировал Danny_Marcelo: 19 марта 2025 - 14:34

0

#14
Пользователь офлайн   M I S T E V 

  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияDanny_Marcelo (19 марта 2025 - 14:32) писал:

Нажмите сюда, чтобы прочитать это сообщение. [Показать]


Причём тут краши? Краш - это когда сервер перестаёт функционировать или вовсе отключается. Данное сообщение ничего общего не имеет с крашем.

В new.pwn сделай цикл на 1 млн итерацией с printf внутри, тебе точно такое же сообщение выдаст, просто потому что функция долго выполняется
0

#15
Пользователь офлайн   Danny_Marcelo 

  • Знаток
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияM I S T E V (19 марта 2025 - 14:35) писал:

Нажмите сюда, чтобы прочитать это сообщение. [Показать]


Оговорился, не краш, а debug. Я просто оставлю 1 пример на его же debug и закончим эту демагогию, ибо факты. есть факты.

[00:54:51] [debug] #0 000829cc in public PawnCmd_OnGameModeInit () at C:\Users\Денис\Desktop\Storm RolePlay\gamemodes\storm.pwn:1864


Цитата

Что это значит?
Плагин crashdetect обнаружил, что в функции OnGameModeInit на строке 1864 файла storm.pwn может быть проблема. Это может быть:

Утечка памяти: Например, если вы создали объект (транспорт, текстдрав и т.д.), но не удалили его.

Некорректная работа с массивами: Выход за пределы массива или использование неинициализированной переменной.

Ошибка в логике: Например, бесконечный цикл или неправильные условия.

Проблемы с вызовами функций: Например, вызов функции с неверными параметрами.

Опасно ли это?
Для сервера: Нет, это сообщение само по себе не опасно. Однако если проблема не будет устранена, это может привести к сбоям в работе сервера (например, к его зависанию или аварийному завершению).


Для игроков: Игроки могут столкнуться с лагами или отключением от сервера, если проблема серьезная.

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

0

#16
Пользователь офлайн   M I S T E V 

  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияDanny_Marcelo (19 марта 2025 - 14:48) писал:

Нажмите сюда, чтобы прочитать это сообщение. [Показать]


Цитата - это ответ GPT? :biggrin:

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

Логически если мыслить, в OnGameModeInit есть какой-то код, который начинает выполнение при старте, когда компилятор доходит до строчки 1864, он уже затратил время на выполнение, которое допустимо по мнению крашдетекта, а всё что дальше - не вписывается в допустимое время.

Если ты такой неверующий, перемести эту строчку в начало паблика и ты удивишься - никаких проблем не будет с этой строкой :blink: Но как так? Прежде чем писать и что-то доказывать, проверь :wink:

Сообщение отредактировал M I S T E V: 19 марта 2025 - 14:58

0

#17
Пользователь офлайн   DeimoS 

  • Evil Scripter
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияDanny_Marcelo (19 марта 2025 - 14:00) писал:

Вот от кого, от кого, а от Deimos не ожидал такого ответа)) Напишите такое на форуме Corteza и будете посланы на 3 советских.
long_call_time 0
не рекомендуется, т.к. это может привести к нестабильной работе сервера.


Эту шизу даже комментировать не буду. Сначала изучи что из себя представляет LongCallTime в CrashDetect, а потом поговорим.


Просмотр сообщенияDanny_Marcelo (19 марта 2025 - 14:00) писал:

По теме, оставь цикл foreach для перебора транспорта, т.к. MAX_VEHICLES считает весь лимит SAMP, то есть 2000 машин от 0 до 2000, у тебя вряд ли в моде 2000 машин. А лучше использовать константу:

#if !defined MAX_VEHICLES
        #define MAX_VEHICLES 100
#endif


Ага. И когда на сервере создастся больше 100 машин - автор словит переполнение массивов, хранящих данные для транспорта :) Замечательный совет (нет).
Не говоря уже о том, что на быстродействие этот твой совет не повлияет практически никак (если речь о циклах, то ты этим буквально сотые доли миллисекунды выиграешь, в лучшем случае).

Поэтому трогать какие-либо стандартные макросы, кроме, разве что MAX_PLAYERS (ибо количество игроков можно физически ограничить настройками сервера) = стрелять в собственную ногу.

Просмотр сообщенияDanny_Marcelo (19 марта 2025 - 14:00) писал:

Вот тут скорее всего идёт переполнение массива. Переменную глянуть надо.
AddStaticVehicleEx(421,2015.5999800,-1143.3000500,25.0000000,272.0000000,147,147,6000); //Virgo  // ругаться тут начинает


Но лучше используй для каждого т/с отдельную переменную.

grovecars[0] = AddStaticVehicleEx(492,2493.8000500,-1681.1999500,13.2000000,0.0000000,86,86,6000); //Greenwood
        grovecars[1] = AddStaticVehicleEx(492,2489.6001000,-1680.8000500,13.2000000,0.0000000,86,86,6000); //Greenwood
       grovecars[2] =  AddStaticVehicleEx(492,2485.8000500,-1680.6999500,13.2000000,0.0000000,86,86,6000); //Greenwood
        grovecars[3] = AddStaticVehicleEx(492,2475.5000000,-1676.5000000,13.2000000,328.0000000,86,86,6000); //Greenwood
и т.д. 


и саму переменную измени с grovecars[2] на ту, сколько машин заюзал. Допустим grovecars[8]. Это всё я говорю исходя из личной практики использования.

Остальные твои проблемы нужно не один час решать, изучать подробнее твой код. Я тоже еще не всё в pawn знаю, по этому пусть другие тут подмогнут.


Какое переполнение массива? Ты вообще лог внимательно читал?


Просмотр сообщенияDanny_Marcelo (19 марта 2025 - 14:32) писал:


Изображение


Так может ты попробуешь внимательнее прочитать то, что тут написано? Давай попробую разжевать: если есть код, который вызывает проблемы (подсказка: лаги) и если "long_call_time" так же сообщает о том, что код выполняется долго, то отключение "long_call_time" не решит проблему. Всё. Больше тут не подразумевается ровным счётом ничего.

При этом, стандартные 5 миллисекунд, на которые настроен "long_call_time" - это далеко не какой-то универсальный тайминг, чтоб считать, что раз у тебя условный OnGameModeInit обрабатывается дольше, то это проблема. У тебя только подключение к БД может 5 миллисекунд занять (в некоторых случаях (когда сервер удалён и т.п.) оно СЕКУНДЫ занимает, а не миллисекунды). Поэтому все тайминги нужно подстраивать под себя, если хочется использовать "long_call_time". При этом, не получится установить какой-то универсальный тайминг (кроме случая, когда хочется просто совсем уж медленный код отлавливать), ибо у тебя в моде будут как функции, которые должны за секунду обрабатываться, так и функции, которым на обработку и 10 секунд может быть мало (тот же OnGameModeInit, инициализирующий мод).
В общем, разберись сначала в вопросе, а потом пытайся что-то комментировать (по крайней мере в таком тоне, который ты тут используешь).

Сообщение отредактировал DeimoS: 19 марта 2025 - 15:19

0

#18
Пользователь офлайн   DeimoS 

  • Evil Scripter
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияDanny_Marcelo (19 марта 2025 - 14:48) писал:

Нажмите сюда, чтобы прочитать это сообщение. [Показать]


Вместо того, чтоб ChatGPT вопросы о Pawn задавать (при том, что он даже для более популярных языков часто выдаёт ахинею), лучше бы внимательнее лог изучил, ибо буквально в двух строках выше у тебя причина срабатывания CrashDetect описана:

Цитата

[debug] Long callback execution detected (hang or performance issue)

0

#19
Пользователь офлайн   Denis_Freedom 

  • Прохожий
  • Вставить ник
  • Раскрыть информацию
Всем спасибо за ответы.Проблемка решена. Закрывайте тему.
0

#20
Пользователь офлайн   MuthaX 

  • Эксперт
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияDanny_Marcelo (19 марта 2025 - 14:00) писал:

long_call_time 0
не рекомендуется, т.к. это может привести к нестабильной работе сервера.

Причину со следствием путаешь.

Просмотр сообщенияDanny_Marcelo (19 марта 2025 - 14:00) писал:

#if !defined MAX_VEHICLES
        #define MAX_VEHICLES 100
#endif


Дубу дал? Где-то посеял #undef и не так написал условие.

Просмотр сообщенияDanny_Marcelo (19 марта 2025 - 14:00) писал:

Вот тут скорее всего идёт переполнение массива. Переменную глянуть надо.
AddStaticVehicleEx(421,2015.5999800,-1143.3000500,25.0000000,272.0000000,147,147,6000); //Virgo  // ругаться тут начинает


А ты сам-то одупляешь, что его функция AddStaticVehicleEx была перехвачена и проблема там не с теми массивами, которые видно, а с итераторами?!
И то, что не AddStaticVehicleEx порождает долгое выполнение, а не выход за пределы массива.


Просмотр сообщенияDanny_Marcelo (19 марта 2025 - 14:00) писал:

Но лучше используй для каждого т/с отдельную переменную.

grovecars[0] = AddStaticVehicleEx(492,2493.8000500,-1681.1999500,13.2000000,0.0000000,86,86,6000); //Greenwood
        grovecars[1] = AddStaticVehicleEx(492,2489.6001000,-1680.8000500,13.2000000,0.0000000,86,86,6000); //Greenwood
       grovecars[2] =  AddStaticVehicleEx(492,2485.8000500,-1680.6999500,13.2000000,0.0000000,86,86,6000); //Greenwood
        grovecars[3] = AddStaticVehicleEx(492,2475.5000000,-1676.5000000,13.2000000,328.0000000,86,86,6000); //Greenwood
и т.д. 


Допустим grovecars[8]. Это всё я говорю исходя из личной практики использования.

Небогатая у тебя практика использования.
0

Поделиться темой:


  • (3 Страниц) +
  • 1
  • 2
  • 3
  • Вы не можете создать новую тему
  • Тема закрыта

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей


Яндекс.Метрика