PDA

Просмотр полной версии : [Вопрос] Компилятор



vovandolg
03.01.2016, 05:30
Почему после компиляции с ключом -d3 в логах выводится не полная информация об ошибке:


[04:26:41] [debug] Run time error 4: "Array index out of bounds"
[04:26:41] [debug] Accessing element at index 16 past array upper bound 15
[04:26:41] [debug] AMX backtrace:
[04:26:41] [debug] #0 00160a64 in public OnPlayerCommandText (2, 6743900) from go.amx

В какой строке или в какой функции допустим была ошибка..
Плагин может какой то мешает, или может не в правильном порядке стоят, от чего такая трабла?

Salik_Davince
03.01.2016, 10:38
Все дело в вашем моде, т.e выход за пределы массива(точнее даже в паблике в вашем моде) OnPlayerCommandText, если можете скиньте строчки которые меняли последними, помогу.

Daniel_Cortez
03.01.2016, 12:23
http://pro-pawn.ru/showthread.php?12957

vovandolg
03.01.2016, 17:00
Ну так то если не выходы за пределы массива, а другие ошибки, да и так надо же найти строчку в этом паблике, а он огромный, я эту ошибку для теста вывел, но почему не указывает в какой строчке и какая команда или функция, переменная?:dash2:

$continue$
05.01.2016, 04:49
Вы точно проделали данные действия?



Также можно получить более подробную информацию (например строки кода, на которых происходит ошибка, имена функций, параметры и т.д.), скомпилировав скрипт в режиме отладки следующим образом:
Открыть блокнот и ввести "-d3" (без кавычек).
Сохранить файл как "pawn.cfg" (под именем указать параметр "Все файлы") в папку с Pawno.
Заново скомпилировать мод.

vovandolg
05.01.2016, 04:59
Я вот иногда залипаю с этим вопросом:pardon:
просто -d3 без всяких других текстов?
или в Params добавить просто без всяких других ключей?

$continue$
05.01.2016, 05:01
Я вот иногда залипаю с этим вопросом:pardon:
просто -d3 без всяких других текстов?
или в Params добавить просто без всяких других ключей?

Просто "-d3" (без кавычек) в файл конфигурации Pawn.cfg (если его нет - создайте)

vovandolg
05.01.2016, 07:17
Ухх сразу выбило переполнение стека вобщем вот так всё печально оказалось

estimated max. usage: unknown, due to recursion

Daniel_Cortez
05.01.2016, 12:38
http://pro-pawn.ru/showthread.php?3586
Этот компилятор может подсказать, в какой функции есть рекурсия, но его нельзя использовать со стандартным pawno.

vovandolg
05.01.2016, 17:37
Ммм а что может быть рекурсией или как они выглядят, можно несколько часто встречаемых примеров, особенно если это RLS)

Profyan
05.01.2016, 19:57
Ммм а что может быть рекурсией или как они выглядят, можно несколько часто встречаемых примеров, особенно если это RLS)

В РЛС рекурсия вроде бы в наблюдении за игроком(Spectate). Вот простой пример рекурсии:


func()
{
return func();
}

InCorrect
05.01.2016, 20:02
Ммм а что может быть рекурсией или как они выглядят, можно несколько часто встречаемых примеров, особенно если это RLS)

Рекурсия (http://pro-pawn.ru/showthread.php?3996-%D0%A7%D1%82%D0%BE-%D1%82%D0%B0%D0%BA%D0%BE%D0%B5-%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D1%8F-%D0%B2-pawn-%D0%9F%D0%BE%D1%8F%D1%81%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5&highlight=%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D1%8F)

Daniel_Cortez
05.01.2016, 20:02
Ещё куча примеров: http://pro-pawn.ru/search.php

vovandolg
05.01.2016, 20:22
del

Daniel_Cortez
05.01.2016, 20:23
Где в таком паблике могут быть рекурсии?
public OnPlayerCommandText
И как они будут выглядеть, прочёл темы, а там всякие ветвления идут, хотя я кроме простых функций не чего не изобретал
Может операторы return, if, else не правильно как то стоят?
Кто мог бы конкретно описать или так рассказать об этом.
Просто вбейте в поиске OnPlayerCommandText.

vovandolg
05.01.2016, 20:37
Просто вбейте в поиске OnPlayerCommandText.

Ааа ну это как обычно, не хочу объяснить человеку просто пошлю его на.. поиск пусть ищет то чего там либо нету либо он не найдет..

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

В РЛС рекурсия вроде бы в наблюдении за игроком(Spectate). Вот простой пример рекурсии:


func()
{
return func();
}


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

Daniel_Cortez
05.01.2016, 23:28
Ааа ну это как обычно, не хочу объяснить человеку просто пошлю его на.. поиск пусть ищет то чего там либо нету либо он не найдет..
Вовсе нет, решение достаточно простое и очевидное: вбиваете в поиск по файлу "OnPlayerCommandText" и находите начало коллбэка, затем жмёте F3 для повторного поиска и находите возможную рекурсию.
Правда, это самый простой вариант, когда функция вызывает себя напрямую. Рекурсия может быть и через другую функцию:


DoSomething(playerid)
{
// ...
OnPlayerCommandText(playerid, "/command");
}

public OnPlayerCommandText(playerid, cmdtext[]);
{
// ...
DoSomething(playerid);
// ...
}

Мало того, в такой цепочке могут быть не две, а три, четыре, а то и больше функций.

vovandolg
06.01.2016, 01:25
Был бы этот паблик маленький ещё или в том компиляторе указывалась строка где точно рекурсия,
так это много времени приходится уложить на поиск рекурсивной шаурмы..

Роуди.
06.01.2016, 22:58
Был бы этот паблик маленький ещё или в том компиляторе указывалась строка где точно рекурсия,
так это много времени приходится уложить на поиск рекурсивной шаурмы..

поэтому выбрось тот мод и не трать время зря)

DeimoS
07.01.2016, 10:40
Был бы этот паблик маленький ещё или в том компиляторе указывалась строка где точно рекурсия,
так это много времени приходится уложить на поиск рекурсивной шаурмы..

Может тогда пусть компилятор за Вас весь код будет писать, который Вы только пожелаете? Только зачем тогда ему Вы...
Что же Вы хотели, когда программированием начинали заниматься? Что будет очень весело, интересно и быстро? Вы даже настоящее программирование-то не видели (ибо Pawn - довольно убогий и урезанный язык, в котором всё сделано для того, чтоб у новичков было минимум проблем), а уже Вас в ступор вводят такие простые задачи. А что же будет, когда Вы с тем же С++ начнёте знакомится?...
В общем, это я всё к тому, что придётся либо ручками и мозгом поработать, чтоб рекурсию найти, либо искать себя в чём-то помимо программирования. Увы

$continue$
08.01.2016, 02:47
Может тогда пусть компилятор за Вас весь код будет писать, который Вы только пожелаете? Только зачем тогда ему Вы...
Что же Вы хотели, когда программированием начинали заниматься? Что будет очень весело, интересно и быстро? Вы даже настоящее программирование-то не видели (ибо Pawn - довольно убогий и урезанный язык, в котором всё сделано для того, чтоб у новичков было минимум проблем), а уже Вас в ступор вводят такие простые задачи. А что же будет, когда Вы с тем же С++ начнёте знакомится?...
В общем, это я всё к тому, что придётся либо ручками и мозгом поработать, чтоб рекурсию найти, либо искать себя в чём-то помимо программирования. Увы

А кто сказал, что ТС хочет связать свою жизнь с IT?
Да, кстати GCC заменяет рекурсию на цикл (http://tproger.ru/translations/will-it-optimize-gcc/)

P.S:Когда ты мне так же говорил :D

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

DeimoS
08.01.2016, 08:01
А кто сказал, что ТС хочет связать свою жизнь с IT?

Ну а ты попробуй спросить у подобного скриптера о том, кто он ;) Они обычно все, стуча в грудь, кричат о том, что они программисты неебацца, только вот знаний и на Pawn не хватает :с
Да и это я писал лишь для того, чтоб намекнуть автору на низкий уровень сложности в текущем ЯП, который он использует. И что в "настоящем" программировании всё намного веселее.


P.S:Когда ты мне так же говорил :D
И что, я был не прав? :D