SSGamers - 12 Anos online por você.

#SSGamers - A Comunidade que mais crescer no brasil!

Participe do fórum, é rápido e fácil

SSGamers - 12 Anos online por você.

#SSGamers - A Comunidade que mais crescer no brasil!

SSGamers - 12 Anos online por você.

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Chegou o novo tema 6.5.5 - SSGamers - Servidores online de qualidade - Aproveite e entre para nossa comunidade, inscreva-se já! - Ouça nossa web radio - Veja nossas novidades - Participe dos nossos setores de jogos online - Parcerias aberta fale já com um administrador.

    [TUT][SIMPLES] Detectar que parte do código está dando Crash usando Debug

    Weslley_Script
    Weslley_Script
    SS - Fundador
    SS - Fundador


    Steam Steam : WeslleySSGames
    Zello : WeslleySSGames
    Mensagens : 11378
    Moedas : 1031977
    Data de inscrição : 06/10/2011
    Idade : 28
    Localização : Brasil

    [TUT][SIMPLES] Detectar que parte do código está dando Crash usando Debug Empty [TUT][SIMPLES] Detectar que parte do código está dando Crash usando Debug

    Mensagem por Weslley_Script Ter 16 maio 2023 - 11:25

    Introdução:


    Fala galera, tudo tranquilo ?

    recentemente vi muitos tópicos aqui na Board sobre Publics ou Funes dando Crash e o usuário não consegue identificar o erro, isso seguidomente seguido comigo, аs vezes erros toscos, аs vezes nгo, enfim, atй que aprendi esta forma muito simples de identificar de onde está vindo o erro, chama-se Debug, espero que ela possa ser ъtil para alguйm.

    O que é "Debug"

    De acordo com a Wikipedia, "Debug" é:

    "Depuração (em inglês: debugging, debug) É o processo de encontrar e reduzir defeitos num aplicativo de software ou mesmo em hardware. Erros de software incluem aqueles que Evitem o programa de ser executado e aqueles que obtiveram um resultado inesperado."

    Em outras palavras, "Debug" é o processo onde você encontra erros em um Aplicativo, estes erros fazem com que o programa não seja executado, seja fechado (Crash) ou processado um resultado inesperado.

    Debug em Publics

    Vamos supor que a Public a seguir está dando Crash (só um exemplo ilustrativo, ela nгo estб):
    peão Код:

    Código:
    [center][left]public OnPlayerText ( playerid, text [ ] )
    {
        if ( PlayerInfo [ playerid ] [ pCalado ]  ==  1 )
        {
             SendClientMessage ( playerid,Vermelho, "ERRO: Você está mudo e não pode falar no chat" ) ;
            retorna  0 ;
        }
        formato ( Str, 256 , "%s %s" , GetPlayerNameEx ( playerid ) , text ) ;
        Registro ("Logs/FalaTodos.ini" , Str ) ;
        retornar  1 ;
    }[/left][/center]

    Você não sabe onde está o erro, segue o que você vai fazer:

    Adicione um "print" em cada linha, exemplo:
    peão Код:


    Código:
    public OnPlayerText ( playerid, text [ ] )
    {
        print ( "1" ) ;
        if ( PlayerInfo [ playerid ] [ pCalado ]  ==  1 )
        {
             SendClientMessage ( playerid,Vermelho, "ERRO: Você está mudo e não pode falar no chat" ) ;
            retorna  0 ;
        }
        imprima ( "2" ) ;
        formato ( Str, 256 , "%s %s", GetPlayerNameEx ( playerid ) , texto ) ;
        imprima ( "3" ) ;
        Log ( "Logs/FalaTodos.ini" , Str ) ;
        imprima ( "4" ) ;
        retornar  1 ;
    }

    Como descobrir em que ponto a Public Crashou:

    Como posso ver eu inserir um total de 4 Prints numerados em ordem crescente, começando a partir de um. Quando a public for chamada (nesse caso, quando o player digitar) irá imprimir "1" no console, após fazer a verificação para saber se ele está mudo, imprimirá "2", após formatar a mesma imprimirá "3" e após escrever o Log, printarÁ "4".

    Caso as prints não cheguem nem mesmo a 2, significa que o Crash ocorreu dentro da "if", e segue o que iremos fazer:
    peão Код:


    Código:
    if ( PlayerInfo [ playerid ] [ pCalado ]  ==  1 )
        {
            print ( "1.1" ) ;
            SendClientMessage ( playerid,Vermelho, "ERRO: Você está mudo e não pode falar no chat" ) ;
            imprima ( "1.2" ) ;
            retorna  0 ;
        }

    Faremos o mesmo esquema que fizemos em toda a public dentro da if, quando o "if" for open, printará "1.1", e quando enviar a mensagem para o player, printará "2.2".

    Caso não chegue a imprimir o "1.2" significa que o Crash ocorreu na função "SendClientMessage", ou seja, que ela não está sendo usada corretamente.

    Agora, voltando para fora do "if":
    peão Код:


    Código:
    public OnPlayerText ( playerid, text [ ] )
    {
        print ( "1" ) ;
        if ( PlayerInfo [ playerid ] [ pCalado ]  ==  1 )
        {
             SendClientMessage ( playerid,Vermelho, "ERRO: Você está mudo e não pode falar no chat" ) ;
            retorna  0 ;
        }
        imprima ( "2" ) ;
        formato ( Str, 256 , "%s %s", GetPlayerNameEx ( playerid ) , texto ) ;
        imprima ( "3" ) ;
        Log ( "Logs/FalaTodos.ini" , Str ) ;
        imprima ( "4" ) ;
        retornar  1 ;
    }

    Caso chegue a imprimir "2", mas não imprima "3", significa que o Crash ocorreu na formatação, ou seja, na linha:
    peão Код:

    formato ( Str, 256 , "%s %s" , GetPlayerNameEx ( playerid ) , texto ) ;
    Caso o mesmo printe "3", mas não printe "4", significa que o Crash ocorreu na função "Log", o que nos leva a próxima parte do tutorial: Debug em Funções Como vimos na parte anterior,

    [size=32]a[/size]

    função que estava Crashando era um "Log", que podemos ver abaixo:
    peão Код:


    Código:
    stock Log ( const Arquivo [ ] , string [ ] )
    {
        if ( ! fexist ( Arquivo ) )
        {
             CriarLog ( Arquivo ) ;
        }
        novas células [  300  ] ;
        novo a, m, d, h, mi, s;
        getdate ( a, m, d ) ;
        gettime ( h,mi,s ) ;
        format ( celulas, sizeof ( celulas ), "(%02d/%02d/%d)[%02d:%02d:%02d] %s \r \n " ,d,m,a,h,mi,s, string ) ;
        novo  Arquivo : Arquivo1 =  fopen ( Arquivo, io_append ) ;
        fwrite ( Arquivo1, celulas ) ;
        fclose ( Arquivo1 ) ;
        retornar  1 ;
    }

    Para saber em que ponto a Stock (ou função, como quiser) crashou, faríamos exatamente o que fizemos na Public:
    peão Код:


    Código:
    log de ações ( const Arquivo [ ] , string [ ] )
    {
        imprimir ( "1" ) ;
        if ( ! fexist ( Arquivo ) )
        {
             CriarLog ( Arquivo ) ;
        }
        imprima ( "2" ) ;
        novas celulas [  300  ] ;
        imprima ( "3" ) ;
        novo a, m, d, h, mi, s;
        imprima ( "4" );
        getdate ( a, m, d ) ;
        imprima ( "5" ) ;
        gettime ( h,mi,s ) ;
        imprima ( "6" ) ;
        format ( celulas, sizeof ( celulas ) , "(%02d/%02d/%d)[%02d:%02d:%02d] %s \r \n " ,d,m,a,h,mi,s, cadeia ) ;
        imprima ( "7" ) ;
        novo  Arquivo : Arquivo1 =  fopen ( Arquivo, io_append );
        imprima ( "8" ) ;
        fwrite ( Arquivo1, celulas ) ;
        imprima ( "9" ) ;
        fclose ( Arquivo1 ) ;
        imprima ( "10" ) ;
        retornar  1 ;
    }

    Como podem ver, criamos a mesma coisa, criamos prints de números em forma crescente a partir do 1, assim, quando a função for executada, imprimirá os números em ordem no console, e assim podemos ver até que número foi impresso, em outras palavras , até que linha o código foi executado antes de Crashar.

    Caso não chegue nem mesmo a imprimir o "2", sabemos que o erro está dentro da "if", e faremos o debug dentro da mesma:
    peão Код:


    Código:
    if ( ! fexist ( Arquivo ) )
        {
            print ( "1.1" ) ;
            CriarLog ( Arquivo ) ;
            imprima ( "1.2" ) ;
        }

    Caso não cheguemos a imprimir a "1.2" significa que o Crash está na função "CriarLog" e repetiremos o processo na mesma.

    Caso termine de verificar o "if" e o mesmo printe o "2", mas não printe o "3", sabemos que o Crash está ocorrendo na linha:
    peão Код:


    Código:
    novas celulas [  300  ] ;

    E assim por diante.

    [size=32]Crashs Comuns:[/size]

    É bastante comum os Crashs acontecerem quando fazemos operações "impossíveis", por exemplo:
    peão Код:


    Código:
    novo Zero =  0 ;
    novo Um =  1 ;
    novo Total = Um / Zero; // LINHA

    Com quase absoluta certeza, a linha destacada irá crashar, por que, como vocês devem saber, é impossível dividir um número por zero.

    -

    Enfim, é um tutorial muito simples e pode funcionar parecero, mas ele com 100% DE CERTEZA irá indicar o Local do Crash se usado de forma correta.

    -

    Créditos:

    - Graf_Spee (Eu) *-*



    [TUT][SIMPLES] Detectar que parte do código está dando Crash usando Debug D07Xwqb
    [TUT][SIMPLES] Detectar que parte do código está dando Crash usando Debug Yjab9HN

      Data/hora atual: Qua 8 maio 2024 - 20:26