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б):
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:
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:
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":
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:
[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:
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:
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:
[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) *-*
-
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) *-*