Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 2 1 2 ПоследняяПоследняя
Показано с 1 по 10 из 11
  1. #1
    Аватар для DiceLine
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.03.2019
    Сообщений
    7
    Репутация:
    0 ±

    Какие есть баги вне программы, влияющие на код/мод?

    Какие внешние причины могут привести к ошибкам в программе, которая верна по синтаксису и семантики Pawn?

    Слышал, что у начинающих/опытных сервер-мейкеров возникают ошибки, лаги, баги и другие непредвиденные проблемы при работе их мода, хотя компилятор не выдает обратную связь, точнее он считает, что программа работает корректно, также сам алгоритм верен. Возникает ситуация: код мода верный, а сервер работает нестабильно. То есть виноват: компилятор или другие компоненты сервера, а не сам мод. Из-за такого приходится исправлять эти баги, чтобы мод нормально работал.

    Хочу узнать список таких проблем, которые могут повлиять на мод, хотя в самом коде мода не кроется проблема, то есть от самого разработчика не зависит возникновение этих проблем явно. Словно как костыль в CLEO опкод 0000: нулевого оффсета, чтобы исправить недоработку. Сам программист не виноват, а разработчики CLEO.

    Попытался как можно понятнее сформулировать, не уверен, что вышло, но надеюсь, что кто-нибудь поймет и поможет. Необходимо решить эти проблемы, подготовить почву и начать свободно программировать на Pawn.
    Случайности - не случайны © Universe

  2. #2
    Аватар для SteveStage
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.10.2019
    Адрес
    Планета Земля
    Сообщений
    318
    Репутация:
    7 ±
    Например, если ты укажешь размер массива в sscanf дефайном, а не числом, то в консоль выведутся варнинги, и будут некоторые проблемы, а компилятор такой код пропускает, или например в mysql при некорректном использовании спецификатора %e в таблицу запишется NULL, а не нужное значение
    И это только верхушки, с которыми столкнулся я, говнокодер, который пытается научиться Pawn чуть больше 2 месяцев
    Коротко говоря, будь внимательней при работе с sscanf и с запросами mysql

  3. #3
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Эмм, если алгоритм написан верно, то и багов никаких не будет. Баги могут появиться только из-за ошибок в коде и никак иначе. Так что не слушай тех, кто тебе там что-то рассказывал. Ну или попроси их же привести примеры, а потом нам расскажи их.
    Последний раз редактировалось DeimoS; 10.11.2019 в 21:10.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  4. #4
    Аватар для SteveStage
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.10.2019
    Адрес
    Планета Земля
    Сообщений
    318
    Репутация:
    7 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Эмм, если алгоритм написан верно, то и багов никаких не будет. Баги могут появиться только из-за ошибок в коде и никак иначе.
    Согласен, код не может быть написан верно, но в нем есть баги. Мб компилятор не видит недоработок, но они всплывут на практике. Так что пиши систему и сразу ее тестируй, чтобы вовремя находить баги и исправлять их, и чтобы они не накапливались

  5. #5
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Steve_Stage Посмотреть сообщение
    Согласен, код не может быть написан верно, но в нем есть баги. Мб компилятор не видит недоработок, но они всплывут на практике. Так что пиши систему и сразу ее тестируй, чтобы вовремя находить баги и исправлять их, и чтобы они не накапливались
    Компилятор видит только синтаксические ошибки. Логистические ошибки (за редким исключением) он не сможет отслеживать, ибо для этого в него заранее должна быть заложена логика всех возможных систем (что физически невозможно), чтоб он мог проверять написанный тобой код. Именно поэтому он и не будет реагировать на кривой алгоритм в системе и т.п.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  6. #6
    Аватар для DiceLine
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.03.2019
    Сообщений
    7
    Репутация:
    0 ±
    Нашел вот эту тему на форуме, спасибо автору. В принципе близкое к тому, что хотел получить: http://pro-pawn.ru/showthread.php?95...BE%D1%80%D0%B0 .
    Случайности - не случайны © Universe

  7. #7
    Аватар для Pa4enka
    Пользователь

    Статус
    Оффлайн
    Регистрация
    22.04.2016
    Адрес
    Украина
    Сообщений
    157
    Репутация:
    35 ±
    Воспользуйся компилятором от Zeex'a и забудь о большинстве багов. В остальном, имхо, Деймос дал четкий ответ: компилятор предназначается не для отслеживания логических ошибок, которые допустил скриптер, а на поиск синтаксических ошибок с которыми мод не будет работать.
    Последний раз редактировалось Pa4enka; 15.11.2019 в 00:41.

  8. #8
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от DiceLine Посмотреть сообщение
    Нашел вот эту тему на форуме, спасибо автору. В принципе близкое к тому, что хотел получить: http://pro-pawn.ru/showthread.php?95...BE%D1%80%D0%B0 .
    Собственно, выше уже ответили про модифицированный компилятор, который исправляет если не все перечисленные баги, то большую их часть, но вообще перечисленное в теме не очень сходится с изначальным вопросом, ибо это не "проблемы, которые могут повлиять на мод, хотя в самом коде мода не кроется проблема". Это именно проблемы кода и незнание особенностей работы компилятора/сервера - логистические ошибки.

    Если уж на то пошло, то тебе стоит и вот эти темы изучить:
    1) http://pro-pawn.ru/showthread.php?66...B3-%D0%B2-Pawn
    2) http://pro-pawn.ru/showthread.php?83...BE%D0%B4%D0%B0
    3) http://pro-pawn.ru/showthread.php?52...B5%D1%82%D1%8B

    Из каждой темы можно вычленить полезную информацию на тему того, как правильно писать код, чтоб было минимум ошибок.
    Последний раз редактировалось DeimoS; 15.11.2019 в 14:04.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  9. #9
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Немного некропостинга

    Цитата Сообщение от Steve_Stage Посмотреть сообщение
    Например, если ты укажешь размер массива в sscanf дефайном, а не числом, то в консоль выведутся варнинги
    Решается так:
    1. main()
    2. {
    3. #define TEST_MACROS 20
    4. new array[] = "TestMessage 5";
    5. new string[TEST_MACROS];
    6. new variable;
    7. sscanf(array, "s["#TEST_MACROS"]i", string, variable);
    8. printf("\n\n%s\n\n%d\n\n", string, variable);
    9. }
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  10. Пользователь сказал cпасибо:
    SteveStage (29.11.2019)
  11. #10
    Аватар для SteveStage
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.10.2019
    Адрес
    Планета Земля
    Сообщений
    318
    Репутация:
    7 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Немного некропостинга



    Решается так:
    1. main()
    2. {
    3. #define TEST_MACROS 20
    4. new array[] = "TestMessage 5";
    5. new string[TEST_MACROS];
    6. new variable;
    7. sscanf(array, "s["#TEST_MACROS"]i", string, variable);
    8. printf("\n\n%s\n\n%d\n\n", string, variable);
    9. }
    Столкнулся с этой проблемой когда писал систему офф бана (один из параметров команды - ник игрока), и я указал просто:
    1. if(sscanf(params, "s[MAX_PLAYER_NAME+1]ds[51]", name, targettime, reason))
    2. return SCM(playerid, COLOR_RED, !"Образец бана оффлайн: /banoff [name] [day] [reason]");

    Во время тестов в консоль вывелись варнинги, и я просто заменил на число (MAX_PLAYER_NAME в 0.3.7 - 24 символа + 1 нуль символ = 25), не найдя альтернативы
    Спасибо)

    UPD:
    1. new
    2. name[MAX_PLAYER_NAME+1],
    3. targettime,
    4. reason[51],
    5. giver[MAX_PLAYER_NAME+1];
    6.  
    7. if(sscanf(params, "s["#MAX_PLAYER_NAME"+1]ds[51]", name, targettime, reason))
    8. return SCM(playerid, COLOR_RED, !"Образец бана оффлайн: /banoff [name] [day] [reason]");


    1. C:\Users\HP\Desktop\Äîêóìåíòû\2) Pawn\Ìîè ìîäû\Junction RP\gamemodes\JunctionMode.pwn(3756) : error 001: expected token: ")", but found "-string-"
    2. C:\Users\HP\Desktop\Äîêóìåíòû\2) Pawn\Ìîè ìîäû\Junction RP\gamemodes\JunctionMode.pwn(3756) : warning 215: expression has no effect
    3. C:\Users\HP\Desktop\Äîêóìåíòû\2) Pawn\Ìîè ìîäû\Junction RP\gamemodes\JunctionMode.pwn(3756) : warning 215: expression has no effect
    4. C:\Users\HP\Desktop\Äîêóìåíòû\2) Pawn\Ìîè ìîäû\Junction RP\gamemodes\JunctionMode.pwn(3756) : warning 215: expression has no effect
    5. C:\Users\HP\Desktop\Äîêóìåíòû\2) Pawn\Ìîè ìîäû\Junction RP\gamemodes\JunctionMode.pwn(3756) : warning 215: expression has no effect
    6. C:\Users\HP\Desktop\Äîêóìåíòû\2) Pawn\Ìîè ìîäû\Junction RP\gamemodes\JunctionMode.pwn(3756) : error 001: expected token: ";", but found ")"
    7. C:\Users\HP\Desktop\Äîêóìåíòû\2) Pawn\Ìîè ìîäû\Junction RP\gamemodes\JunctionMode.pwn(3756) : error 029: invalid expression, assumed zero
    8. C:\Users\HP\Desktop\Äîêóìåíòû\2) Pawn\Ìîè ìîäû\Junction RP\gamemodes\JunctionMode.pwn(3756) : fatal error 107: too many error messages on one line


    Что я делаю не так?

    UPD2: Я задефайнил MAX_PLAYER_NAME в самом моде и теперь новая ошибка:

    1. C:\Users\HP\Desktop\Äîêóìåíòû\2) Pawn\Ìîè ìîäû\Junction RP\gamemodes\JunctionMode.pwn(58) : warning 201: redefinition of constant/macro (symbol "MAX_PLAYER_NAME")


    Но мод скомпилировался
    Последний раз редактировалось SteveStage; 29.11.2019 в 00:03.

 

 
Страница 1 из 2 1 2 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •