Debugando

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

Qualidade Debugando

Mensagem por saim em Qui 06 Out 2011, 00:55

Nome: Debugando, ou usando o debug mode
Descrição: Esse tutorial ensia a usar o debug mode e, consequentemente, a resolver sozinho metade dos problemas de código.
Nível de dificuldade: iniciante.
Requerimentos: Qualquer versão do game maker (acredito que não haja diferenças entre as versões, mas me baseei no GM 8.0)
Desenvolvimento:


Já teve um problema que você saberia resolver se soubesse o valor das variáveis?
Ou um problema que você sente que daria pra se virar se o jogo rodasse mais devagarinho?
Bom, o game maker tem uma ferramenta que te possibilita isso. Chama-se “debug mode”.

No debug mode, você roda seu jogo e surge uma janelinha. Nessa janelinha, você pode visualizar muitas, se não todas, variáveis do seu jogo. O escopo desse tutorial consiste, basicamente, em ensinar a usar essa janelinha.


Entrando no debug mode:
Nada mais simples: sabe aquele “play” verde que você usa pra rodar o jogo? Existe um “play” vermelho logo ao lado dele. Clicando nesse segundo play, você roda o jogo em modo debug.
Ou você pode ir em "run-run in debug mode". Ou apertar F6.

mouse_id:
Ao passar o mouse sobre os objetos, um texto aparece no canto inferior direito da janela de debug. O texto diz “mouse_id=” e um número grande. Esse número é a id da instância sob o cursor do mouse. Isso será importante mais adiante.

Visualizando variáveis:
Pra visualizar variáveis, você clica no botão “+”. Aparecerá uma nova janela e, nela, você digita qual variável você quer acompanhar. A variável aparecerá numa tabela, com seu valor logo à direita.
Pra visualizar variáveis globais, basta digitar o nome da variável. Digite “room” e o índice da room em que o jogo estiver aparecerá ao lado. Digite o nome de algum objeto e o índice desse objeto (não das instâncias) aparecerá. Variáveis que comecem com “global.” requerem que você digite “global.” pra serem visualizadas.
Pra visualizar variáveis locais, você digita a id da instância, entre parênteses, seguido de um ponto e o nome da variável que você quer verificar. Exemplo:
(100357).speed
Você pode usar o mouse_id (ver acima) pra saber o valor da id da instância a ser observada. Pode-se digitar o nome do objeto seguido de ponto e o nome da variável, mas isso retornará apenas o valor da variável da instância com id mais baixo (a primeira instância do objeto).
Como as variáveis “var” deixam de existir logo após a execução do código, essas não podem ser verificadas diretamente. Há formas de verificá-las que serão abordadas mais adiante.

tools - todas as variáveis:
Bom, suponhamos que você esteja sem paciência pra escrever linha-por-linha quais variáveis você quer acompanhar. Você pode ir em "tools". Lá tem algumas opções auto-explicativas.
"show global variables" mostra todas as variáveis globais (inclusive aquelas que requerem o uso de "global.", mas não aparece o "global." no nome delas).
"show local variables" vai te pedir um objeto ou instância e mostrará todas as variáveis dele. A regra da primeira instância do objeto vale aqui também.
"show instances" vai te mostrar os ids das instâncias em jogo, e de quebra, o sprite_name de cada uma delas (o nome mesmo do sprite, não a id).
Finalmente, a última opção "show messages" é um pouco mais complexa. Existe a função "show_debug_message" que, aparentemente não faz nada. Pode colocar em qualquer lugar do seu jogo que, a menos que você consiga errar a sintaxe da função, você não notará a presença dela. Mas rodando em debug, indo em "tools-show messages", todas as strings dessa função estarão lá. Então, pra acompanhar o valor de uma var (lembra que eu disse que tinha jeito?), você pode colocar, NO PONTO DO CÓDIGO EM QUE VOCÊ QUER SABER O VALOR DELA, "show_debug_message(string(variável))".

velocidades:
Ainda é possível acelerar/retardar a velocidade de execução no modo debug. Vá em "tools-set speed" e digite a nova velocidade da room. Isso pode ser útil pra verificar, por exemplo, se a velocidade caiu a zero no momento em que o objeto colide com o outro ou só no step seguinte. Pode ser usado, também pra ver se o loop que você definiu é eficiente ou está exigindo demais da memória do computador - um jogo simples deveria rodar a 60 fps sem problemas, enquanto que um jogo mais complexo pode aceitar uns 40 fps.
Ah, sim, a velocidade real, em fps é mostrada no canto inferior esquerdo da janela de debug.
Você pode, também, paralisar o jogo todo e avançar step-por-step. Clique no botão de pausa que o jogo todo para. Há uma setinha que, ao ser clicada, permite que o jogo avance um step e pare de novo, dando todo o tempo que você precisa pra tentar visualizar porque foi que a variável que deveria ter mudado de valor não mudou (ou vice-versa).

novo debug
Ou: save e load. Se você conseguiu colocar na tela todas as variáveis que você quer visualizar e acha que descobriu o problema, NÃO feche o jogo para editá-lo ainda. Vá em "watch-save" e grave num arquivo de texto as variáveis que você estiver observando. Caso você esteja errado e a correção não seja efetiva, você vai querer resgatar quais variáveis são essas. Pra isso, vá em "watch-load" e selecione o arquivo. Esse arquivo pode ser editado manualmente.

debug_mode
"Ué, você não passou o tutorial todo falando sobre debug mode?" Sim, mas note o underline entre "debug" e "mode". Sim, é uma variável global (que não aparece em "show global variables" por motivos óbvios). Sim, ela é "true" quando você roda o jogo em debug mode e "false", de outra forma. E, sim, ela é útil.
Suponha que você determine um ponto através de coordenadas que são calculadas em código. Suponha que você desconfie que a posição calculada não é a que você queria. Ver o valor das variáveis ajuda, mas não te dá "aquela" segurança de que o ponto está no lugar certo ou não. Então, apele, use o draw event pra desenhar o ponto. Use draw_circle, sei lá. E, pra não correr o risco do seu jogo ser lançado com aquele círculo horroroso só porque você esqueceu de tirar uma linha de código, coloque esse desenho dentro de um "if debug_mode". Assim, no modo debug, o código será executado e o círculo aparecerá e, no jogo normal, não.

Fim. Espero que esse tutorial ajude iniciantes a serem um pouco mais arrojados e veteranos a verem seus erros sozinhos. Eu, mesmo, vou continuar dependendo da moçada daqui da comunidade... :oops:


Última edição por saim em Qui 06 Out 2011, 16:09, editado 3 vez(es)

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

Qualidade Re: Debugando

Mensagem por Tiago Lima em Qui 06 Out 2011, 07:52

Seu tutorial tá muito legal, realmente é uma obrigação, independente da linguagem que agente use, saber debugar o código, e seu tutorial tá bem instrutivo, a formatação (ou a falta dela) é o que confundi um pouco, mas você já sabe, né?

Bom tuto!

Tiago Lima

Ranking : Nota C
Número de Mensagens : 199
Data de inscrição : 14/07/2008
Notas recebidas : C
Reputação : 17
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://www.youtube.com/user/CanalNexteLevel

Voltar ao Topo Ir em baixo

Qualidade Re: Debugando

Mensagem por Super Games em Qui 06 Out 2011, 08:35

Um bom tutorial com certeza, eu mesmo não sabia utilizar o "Debug Mode".

Super Games

Ranking : Nota D
Número de Mensagens : 2704
Idade : 18
Data de inscrição : 10/06/2010
Notas recebidas : D
Reputação : 10
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Qualidade Re: Debugando

Mensagem por Alex FC em Qui 06 Out 2011, 09:05

Ótimo tutorial saim. Realmente seria impossível resolver certos problemas sem "debugar".

Dica: Pelo visto tu digitou no Word e colou aqui. Os espaçamentos entre os parágrafos foram "comidos" e o texto fica parerendo maior do que é.

Edit: Agora que vi seu EDIT sobre a formatação Very Happy.

FLWS!

Alex FC

Ranking : Nota A
Número de Mensagens : 2503
Idade : 23
Data de inscrição : 20/12/2008
Notas recebidas : B A
Reputação : 174
Insignia 1 x 1 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 2
   : 1
   : 1

http://redscreensoft.blogspot.com

Voltar ao Topo Ir em baixo

Qualidade Re: Debugando

Mensagem por Klior em Qui 06 Out 2011, 09:16

Muito bom tutorial, eu uso muito o modo debug, acho indispensável o show_debug_message, variáveis local e variáveis globais, oque eu ainda não conhecia é sobre a variável debug_mode, achei bem interessante.

Klior

Número de Mensagens : 426
Idade : 25
Data de inscrição : 07/03/2010
Reputação : 13
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Qualidade Re: Debugando

Mensagem por JV Justino em Qui 06 Out 2011, 11:33

Ótimo tutorial Saim!

Sempre uso o debug quando tenho problemas e não consigo resolvê-los. Também o uso quando vou fazer alguns testes dentro do jogo.

Enfim, o tutorial está ótimo e bem explicado.
Aprovado!

flw

JV Justino

Ranking : Nota A
Número de Mensagens : 619
Idade : 19
Data de inscrição : 07/12/2010
Notas recebidas : A+A
Reputação : 20
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Qualidade Re: Debugando

Mensagem por saim em Qui 06 Out 2011, 16:05

Tsurugi Kyousuke escreveu:eu mesmo não sabia utilizar o "Debug Mode".
Foi o que me motivou a elaborar o tutorial. Notei que muitas dúvidas da comunidade, em geral, não existiriam se todo mundo soubesse usar o debug.

Alex FC escreveu:Edit: Agora que vi seu EDIT sobre a formatação Very Happy.
Não, na verdade o que eu quis dizer era aquele cabeçalho. Os parágrafos estão inteiros mesmo, acho... Vou dar mais uma conferida, mas não achei nenhuma linha comida, na primeira passada de olhos.

Klior escreveu:oque eu ainda não conhecia é sobre a variável debug_mode
Eu também não! :oops: Fui pesquisar, pra fazer um tutorial completo, e dei de cara com ela. É o que dizem, a melhor forma de aprender é ensinar...

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

Qualidade Re: Debugando

Mensagem por Conteúdo patrocinado Hoje à(s) 04:07


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

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


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