[Tutorial] Resolvendo erros encontrados pelo crashdetect
#1

Olб, estou criando este tуpico com a intenзгo de ajudar pessoas que tem algumas 'duvidas' sobre o plugin crashdetect.

Este plugin, tem a funзгo de achar problemas em seu script, de diversas maneiras.
Mas, muitas das vezes ele ocorre de dizer no log o que vocк praticamente entende nada.

Um exemplo:
pawn Код:
[21/09/2013 17:56:11] [debug] Run time error 4: "Array index out of bounds"
[21/09/2013 17:56:11] [debug]  Accessing element at negative index -1
[21/09/2013 17:56:11] [debug] AMX backtrace:
[21/09/2013 17:56:11] [debug] #0 00386c3c in ?? (0x00000041) from GM.amx
[21/09/2013 17:56:11] [debug] #1 0044f35c in ?? (0x00000041, 0x00000001) from GM.amx
[21/09/2013 17:56:11] [debug] #2 00363448 in public OnDialogResponse (0x00000041, 0x000002c1, 0x00000001, 0xffffffff, 0x00c3ae2c) from GM.amx
Deu б entender que o problema estб em uma dialog. Mas como irei saber qual dialog estб com o tal problema?

Hum, uma boa pergunta.
Entгo, andei pesquisando aqui e descobri uma coisa que funciona. Testei e atй arrumei problemas, e agora irei dar a dica.
Este site, й um conversor.


Pergunta: Por que um conversor?
Resposta: Para achar as informaзхes descritas pelo crashdetect (OnDialogResponse (0x00000041, 0x000002c1, 0x00000001, 0xffffffff, 0x00c3ae2c)).

Primeiramente, vocк deve saber como й o funcionamento da tal callback.
Como muitos sabem (mais experientes) a OnDialogResponse trabalha na ordem
(playerid, dialogid, response, listitem, inputtext[])

Entгo, os erros estгo relacionados nesta ordem
Entгo, iremos abrir o site e clicar na bolinha Hexadecimal.
Com ela marcada, iremos colar os valores abaixo (um de cada vez):

0x00000041
0x000002c1
0x00000001
0xffffffff
0x00c3ae2c

Agora, os resultados mostrados em Decimais:
65
705
1
*
*

Agora vocк deve estar se perguntando.. Por que teve os 'asteriscos'
Simplesmente, por que jб achei a minha dialog, e no caso esta dialog 705 й uma DIALOG_STYLE_MSGBOX. (No meu gamemode), que no caso nгo possue listitem nem inputtext

Opa! Jб vimos que entгo tem um debug em
OnDialogResponse(playerid 65, dialogid 705, response 1, listitem, inputtext[])

Um script exemplo.
pawn Код:
#include a_samp
#include zcmd
public OnFilterScriptInit()
{
    return 1;
}
new Exemplo1[5];
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(dialogid == 7777) {
        if(!response) return 1;
        Exemplo1[listitem] = 1;
        printf("Exemplo 1 - listitem : %i", listitem);
        return 1;
    }
    return 0;
}

CMD:exemplo1(playerid) return ShowPlayerDialog(playerid, 7777, DIALOG_STYLE_LIST, "Exemplo", "1\n2\n3\n4\n5\n6\n7", "Ok", "Fechar");
Como no script acima, iremos chamar a dialog 7777, e 'Exemplo' tem 5 cells. Veja agora o log feito usando 1 listitem por vez.

pawn Код:
[25/09/2013 19:02:40]   Filterscript 'exemplo.amx' loaded.
[25/09/2013 19:02:51] Exemplo 1 - listitem : 0
[25/09/2013 19:02:53] Exemplo 1 - listitem : 1
[25/09/2013 19:02:54] Exemplo 1 - listitem : 2
[25/09/2013 19:02:56] Exemplo 1 - listitem : 3
[25/09/2013 19:02:58] Exemplo 1 - listitem : 4
[25/09/2013 19:03:00] [debug] Run time error 4: "Array index out of bounds"
[25/09/2013 19:03:00] [debug]  Accessing element at index 5 past array upper bound 4
[25/09/2013 19:03:00] [debug] AMX backtrace:
[25/09/2013 19:03:00] [debug] #0 00000578 in public OnDialogResponse (0x00000004, 0x00001e61, 0x00000001, 0x00000005, 0x0000041c) from exemplo.amx
[25/09/2013 19:03:02] [debug] Run time error 4: "Array index out of bounds"
[25/09/2013 19:03:02] [debug]  Accessing element at index 6 past array upper bound 4
[25/09/2013 19:03:02] [debug] AMX backtrace:
[25/09/2013 19:03:02] [debug] #0 00000578 in public OnDialogResponse (0x00000004, 0x00001e61, 0x00000001, 0x00000006, 0x0000041c) from exemplo.amx
Viram os erros?
Traduzindo apenas os erros.
pawn Код:
erro 1: OnDialogResponse(4, 7777, 1, 5, inputtext[])
erro 2: OnDialogResponse(4, 7777, 1, 6, inputtext[])
Espero que tenham entendido o pequeno tutorial.

Provavelmente, isto nгo pode ser totalmente funcional.
Porйm assim deste modo funcionou corretamente.

Download do plugin crash detect: Aqui
Listas de erro: Aqui (Traduzida) **
Reply


Messages In This Thread

Forum Jump:


Users browsing this thread: 2 Guest(s)