Tratamento de erros

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Tratamento de erros

Mensagem por chicoweb em Qui 21 Fev 2013, 11:08

Bom dia Galera,

Sobre tratamento de erros, o gm possibilita isso?

Por exemplo o código abaixo:

Código:
with ball{
    instance_destroy()
}

Se nao existir a intancia ball vai dar erro.
Eu sei que poderia usar o if instance_exists, mas aqui é só um exemplo.

como que eu pularia essa linha para o jogo não erro nem em tempo de compilação nem execução, tipo o algoritimo abaixo como teria que ser feito em gml???

Se erro = verdadeiro { continue na proxima linha }
with ball{ instance_destroy() }
if error_occurred { alerta("DEU ERRO") }


Eu sei que não é recomendável colocar isso nos códigos de nenhum programa o correto é funcionar tudo sem erro, mas tem hora que agente é meio que ogrigado por causa de prazos.

Obrigado!

chicoweb

Ranking : Nota C
Número de Mensagens : 666
Idade : 40
Data de inscrição : 15/05/2012
Notas recebidas : B+C
Reputação : 49
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Tratamento de erros

Mensagem por Gonçalves em Qui 21 Fev 2013, 11:12

Você pode usar:

Código:
if instance_exists(ball)
{
    with(ball) instance_destroy()
}
else
{
    show_error("Instância ''ball'' não existe!", false)
}

Gonçalves

Ranking : Nota B
Número de Mensagens : 1013
Data de inscrição : 29/10/2010
Notas recebidas : B + A + C
Reputação : 79
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 2
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Tratamento de erros

Mensagem por saim em Qui 21 Fev 2013, 11:27

Na verdade, esse código não daria erro, com ou sem instâncias...
Mas o fato é que o GM já tem, nativo, um esquema de alerta. Qualquer erro, pula uma mensagem na tela. Quer um código que dá erro pra testar? Coloque
Código:
teste += 1;
no create de algum objeto. Vai aperecer o erro "unknown variable".

Agora, funções que tratam erro NO CÓDIGO... eu achei que não existiam, mas existem sim! Smile
manual escreveu:error_occurred Indicates whether an error has occurred.
error_last String indicating the last error message.
[edit:] tem mais!
manual escreveu:show_error(str,abort) Displays a standard error message (and/or writes it to the log file). abort indicates whether the game should abort.


Pra NÃO mostrar a janelinha de erro, o manual indica uns truques que DEVEM estar em "global game settings" (mas não chequei):
manual escreveu:Display error messages
When checked, error messages are shown to the player. In the final version of the game you might want to uncheck this option.


Write error messages to file game_errors.logWhen checked all error messages are written to a file called game_errors.log in the game folder.

Abort on all error messages
Normally, certain errors are fatal while others can be ignored. When checking this option all errors are considered fatal and lead to aborting the game. In the final version of the game you distribute you might want to check this option.

Treat uninitialized variables as 0
One common error is to use a variable before a value is assigned to it. Sometimes this is difficult to avoid. When checking this option such uninitialized variables no longer report an error but are treated as value 0. Be careful though. It might mean that you don't spot typing mistakes anymore.

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: Tratamento de erros

Mensagem por theguitarmester em Qui 21 Fev 2013, 11:35

Treat uninitialized variables as 0, Nunca use isso enquanto esta fazendo o jogo, isso dificultará MUITO o processo para achar erros.

deixe marcada essa tambem Display error messages enquanto está fazendo o jogo, a menos que você criou outra mensagem de erro.

theguitarmester

Ranking : Sem avaliações
Número de Mensagens : 1908
Idade : 21
Data de inscrição : 28/02/2012
Notas recebidas : B
Reputação : 80
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Prêmios
   : 2
   : 2
   : 1

http://guitarmester.no.comunidades.net/index.php?pagina=19362978

Voltar ao Topo Ir em baixo

Re: Tratamento de erros

Mensagem por chicoweb em Qui 21 Fev 2013, 11:56


theguitarmester eu to ligado que isso até impossibilita de achar os problemas no jogo, é que eu to pensando em termos de prazos, por exemplo se tiver que enviar um jogo ate amanha, e tiver um erro simples, eu nao quero perder 5 horas tentando consertar. Nesse caso eu colocaria a gambiarra hoje e no outro dia consertava bonitim kkkk..

Saim eu tentei usar isso:

Eu desabilitei a primeira opção: Display error messages
Realmente ela não exibe o erro na tela.

Tentei o seguinte tratamento, não achei exemplo em lugar nenhum nem no google aff!!! Então tentei ir pela lógica:

No create de um objeto qualquer numa room qualquer:

Código:
teste += 1
// Se deu erro
if error_occurred {
    show_message("DEU ERRO NA CRIAÇÃO DO OBJETO TAL: " + error_last)
}else{
    show_message("OBJETO TAL CRIADO TRANQUILAMENTE!!!")
}

Não funcionou, não exibiu nenhum mensagem, se alguem quiser tentar ae, acho que seria uma coisa nova que vai servir pra todos.

chicoweb

Ranking : Nota C
Número de Mensagens : 666
Idade : 40
Data de inscrição : 15/05/2012
Notas recebidas : B+C
Reputação : 49
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Tratamento de erros

Mensagem por Gonçalves em Qui 21 Fev 2013, 12:10

Na verdade, esse código não daria erro, com ou sem instâncias...
Eu testei aqui e funcionou... ¬¬'

Aliás, no error_occured, o GM já cria um alerta automaticamente, logo essa mensagem será inútil (a não ser que queira fazer um novo de sistema de alertas pro programa), o que você poderia fazer é checar mesmo que tipo de erro deu para que seja adicionado um novo "alerta de erro".

Até mais!

Gonçalves

Ranking : Nota B
Número de Mensagens : 1013
Data de inscrição : 29/10/2010
Notas recebidas : B + A + C
Reputação : 79
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 2
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Tratamento de erros

Mensagem por saim em Qui 21 Fev 2013, 13:27

@chicoweb:
Pelo que eu tenho notado, quando acontece um erro e a gente manda ignorar, o GM ignora todo o evento. De agora pra frente, tudo que eu disser é mera suposição.
Provavelmente, quando você desabilita os erros, o GM deixa de mostrar a janelinha de erro e executa a mesma rotina de quando você clica em "ignorar". Daí, colocar um show_message depois do erro, realmente é o mesmo que nada.
Mas aí, se você reler minha mensagem acima, vai ver que eu encontrei mais uma função. Show_error!
E agora, o chute lá do outro lado do campo: pode ser que essa função seja executada dentro de um código mesmo após o erro ter acontecido e o botão de ignorar ter sido apertado.
(peraí, ISSO eu tenho como testar!)

2 minutos depois...

Não, depois de um erro, o resto do código é ignorado na maior, mesmo. Nenhuma mágica em "show_error". Parece que é uma mensagem pra ser mostrada COMO SE FOSSE uma mensagem de erro (usando a mesma janela, escrevendo no log, etc), mas seriam erros que o programa desconsidera. Tipo uma colisão acontecendo quando não deveria - o programa acha super normal a colisão acontecer a qualquer momento, mas o programador pode querer que apareça uma mensagem de erro em alguns casos.

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: Tratamento de erros

Mensagem por theguitarmester em Qui 21 Fev 2013, 14:35

talves isto ajude, não tem tanto a ver, mas:
http://gmbr.forumeiros.com/t25797-trancado-variavel-error_occoured


outra coisa, quando acontece um erro, error_occurred volta o valor true(1), para voltar a false(0), você mesmo deve editar, tópico que mostrei tem isso.


------editado
Realmente quando acontece um erro é abortado todo o script, estava em dúvida será todo {}, mas não, é todo script.

Uma maneira que achei até agora, é colocar após um script, outro que checa se houve erro.



1111 mensagens o.O anh! Fim do mundo? do meu usuário? acho que não.

theguitarmester

Ranking : Sem avaliações
Número de Mensagens : 1908
Idade : 21
Data de inscrição : 28/02/2012
Notas recebidas : B
Reputação : 80
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Prêmios
   : 2
   : 2
   : 1

http://guitarmester.no.comunidades.net/index.php?pagina=19362978

Voltar ao Topo Ir em baixo

Re: Tratamento de erros

Mensagem por PedroX em Qui 21 Fev 2013, 15:07

No final daquele step que o valor da variável error_ocurred vai ser true, se acontecer um erro.

Faça o teste:

Create

t+=1

Step

if (error_ocurred) show_message(error_last);

Para contornar, você pode definir um alarm para o step (alarm[x]=1) seguinte e então pegar os erros. Mas assim você teria que executar o restante do Step.

Até mais!

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: Tratamento de erros

Mensagem por Kabeção em Qui 21 Fev 2013, 16:27

Mas ele mostra exatamente aonde esta o erro...
Ao invés de simplesmente corrigir você vai ter que programar um tratamento para um possível. Usar esse error_ocurred não dificultaria ainda mais as coisas?

Kabeção

Ranking : Sem avaliações
Número de Mensagens : 2314
Data de inscrição : 08/06/2008
Reputação : 100
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 3
   : 0
   : 1

http://blackcapapps.blogspot.com.br/

Voltar ao Topo Ir em baixo

Re: Tratamento de erros

Mensagem por saim em Qui 21 Fev 2013, 16:59

Kabeção escreveu:Usar esse error_ocurred não dificultaria ainda mais as coisas?
Parece mesmo uma redundância, mas se você colocar dentro de um "if (debug_mode == true)", aí pode começar a fazer sentido. O erro só aparece quando estiver em modo debug.

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: Tratamento de erros

Mensagem por GameMakerTutoriais em Qui 21 Fev 2013, 18:48


Spoiler:
Ele ignora o restante do código, mas só da action (tipo um 'piece of code' separado) e não do evento inteiro. Mas acho que dá pra fazer um gambiarra aí... Como a error_last tem a informação do objeto, do número da ação, da linha e da posição do erro, acho que daria pra tentar pegar isso e executar o resto do código que o GM "saltou".

Num script seria mais fácil porque o código gml dele é acessível com script_get_text(), mas eu não conheço uma forma de pegar um código de um evento dentro do objeto. A única coisa que eu consigo pensar é tentar executar um event_perform() da action que eu erro, depois do erro (na action posterior, e não num step ou evento depois). Lógico que muita coisa tem que ser levada em consideração (inclusive o tipo de erro), mas em alguns casos pode até dar certo.

Mas é infinitamente melhor já tentar criar a condição pra contornar o erro no código.

Spoiler:
Quanto a essa sintaxe aí... quando você estiver com dúvida ao montar o código, aperte F2 e vai aparecer um menuzinho, por lá tem umas condicionais que, se você seguir, fica mais fácil.

-------- Edit --------

Ex.: http://the640kbworld.webng.com/gamemaker/gmerror.zip
Não compensa o trabalho.

GameMakerTutoriais

Número de Mensagens : 800
Data de inscrição : 29/01/2011
Reputação : 26
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Tratamento de erros

Mensagem por chicoweb em Sex 22 Fev 2013, 09:38


É Galera se a intenção é pular a linha do erro e depois continuar, infelizmente isso não vai ser útil.
Como o saim observou, ele ignora tudo que vem depois da linha que gera o erro, se estiver no mesmo script.

Uma engine aqui na prática, pra testar dando erro e sem dar erro, comentem a linha "teste += 1" do evento create.
Tem meus comentarios lá vcs vão entender, acho que miou essa rotina de tratamento de erro neh??

engine teste error

chicoweb

Ranking : Nota C
Número de Mensagens : 666
Idade : 40
Data de inscrição : 15/05/2012
Notas recebidas : B+C
Reputação : 49
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Tratamento de erros

Mensagem por Conteúdo patrocinado Hoje à(s) 16:30


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum