Endereço original : http://nodejs.netease.com/topic/515251b97f53b3d3330025c7
Usar um IDE útil para desenvolver aplicativos pode tornar nosso trabalho mais eficiente. A depuração nos permite localizar com precisão os bugs e encontrar problemas.
Este artigo descreve como usar o WebStorm, um IDE JavaScript de nível monstruoso, para depurar o Chat de Pomelo .
Se você preferir outros IDEs como o Eclipse , espero que este artigo também possa ser útil.
prefácio
* Em primeiro lugar, precisamos saber que o aplicativo NodeJS pode adicionar --debug=5858
parâmetros ao comando em execução, o que pode fazer com que o programa NodeJS escute a 5858
porta local e habilite o modo de depuração.
-
Em segundo lugar, o princípio operacional do Pomelo é:
pomelo start
quando o servidor é iniciadomaster
, ele primeiro lê o arquivo de configuração e, em seguida, iniciagame-server/config/servers.json
cada processo do servidor configurado no arquivo.id
Entre eles, , e assim por diantehost
,port
estão os parâmetros de inicialização do subservidor, e esses parâmetros serão colocadosapp.js
atrás da linha de comando de inicialização. -
Mais uma vez, os designers do Pomelo inicialmente consideraram a maneira fácil de adicionar parâmetros diretamente antes e
node
depoisapp.js
: no arquivo de configuração do servidor,"args": " 你想要的参数 "
depois que a entrada de configuração é inserida, ele pode ser executado com os parâmetros que você especificarnode
.
Modifique a configuração para iniciar o servidor com modo de depuração
1. Abra o arquivo
abra game-server/config/servers.json
. Para facilitar o desenvolvimento, reduzimos o número de servidores para 1 instância em execução por função. Então você verá:
2. Modifique e salve
Ficamos gate
interessados em saber como funciona a distribuição de carga do servidor e queríamos depurá-la. Neste momento, só precisamos inserir o seguinte código no {"id": "gate-server-1", ...
final da linha, }
antes das chaves , "args": " --debug=32312 "
. Faça com que gete
o grupo de configuração do servidor fique assim:
Quando o servidor for iniciado novamente, master
o servidor lerá a nova configuração e executará gate-server-1
o servidor com essa configuração.
O processo do servidor escutará 32312
a porta para que o depurador possa se conectar. Definir a porta mais alta é reduzir a possibilidade de conflitos de porta. ADDRINUSE
Durante o processo de desenvolvimento, se você encontrar um erro (a porta já está ocupada) após a inicialização , use pomelo kill --force
o programa kill Pomelo e ajuste o valor da porta aqui.
Configurar o depurador do IDE
1. Abra Edit Configurations...
a caixa de diálogo
Run
Você pode inseri-lo no pequeno triângulo na frente dos botões de execução e depuração ou selecionar - na barra de ferramentas Edit Configurations...
.
2. Adicione um novoNode.js Remote Debug
Name
Os nomes das colunas podem ser arbitrários, mas é melhor escolher nomes claros e fáceis de entender. Em seguida, verifique-o Single instance only
para que apenas um depurador seja iniciado. E não haverá muitos depuradores iguais conectados à porta de depuração especificada posteriormente.
O seguinte Host
escreve localmente127.0.0.1
, Debug Port
preencha o número da porta especificado acima, eu o uso aqui 32312
, é exatamente o mesmo que no arquivo de configuração anterior. Local directory
Especifica o diretório onde o game-server/app.js
diretório atual está localizado.
Anexo: executar configuração
Claro, você deve ter notado que isso Configurations
inclui não apenas a depuração, mas também a execução da configuração. O método de configuração em execução é o mesmo que o método geral de configuração do programa NodeJS. Os recém-chegados ao NodeJS podem consultar a configuração na imagem. Preste atenção ao conteúdo da caixa.
pronto para depurar
1. Inicie os servidores Web e Chat, respectivamente
Se você configurou para executar o servidor de bate-papo e da Web, agora pode selecionar e no menu suspenso de configuração na frente dos botões de execução e depuração e, em seguida, Chat
clicar Web
no botão de execução [►]. Após a execução, você pode visualizar a saída de log da saída do console abaixo do IDE e verificar se a inicialização dos dois servidores foi bem-sucedida. Se houver uma letra vermelha, provavelmente significa que a inicialização falhou. Você pode pesquisar no Google ou enviar um problema de acordo com a mensagem de erro solicitada para encontrar uma solução.
2. Conecte o depurador
Em seguida, selecione a configuração de depuração agora mesmo no menu suspenso de configuração gate study
e clique no botão de depuração [☼]. Verifique a parte inferior da janela Debugger
, você pode ver um prompt dizendo Connected to 127.0.0.1:32312
.
3. Defina pontos de interrupção
Como queremos depurar gate
o código relacionado à alocação do conector no servidor, abra-o no IDE app/servers/gate/handler/gateHandler.js
. Localize a linha 30 e defina um ponto de interrupção aqui.
prática
Abra http://127.0.0.1:3001/index.html no navegador e você verá Chat of Pomelo
a página de login do título. Depois de preencher o formulário de duas colunas, clique no botão [JOIN].
Nesse ponto, a página não responderá porque o código do lado do servidor está bloqueado por um ponto de interrupção. E o IDE será ativado por causa do depurador:
Na janela inferior, além das funções necessárias como StepOver, StepInto e StepOut usadas na depuração convencional, existem muitas ferramentas úteis, como avaliação instantânea de expressões, interrupção automática quando ocorrem exceções de troca... Não vou discutir isso em profundidade aqui.
aplicativos de bate-papo disponíveis
senso comum
Depois que o servidor da web é iniciado com sucesso, podemos ver que ele solicita que ele possa ser acessado http://127.0.0.1:3001/index.html
. Mas todos nós sabemos que 127.0.0.1 é o endereço IP local, se você realmente quiser "conversar" com outras pessoas, isso não funcionará. Como outras pessoas podem não conseguir abrir 127.0.0.1:3001, mesmo se estiver aberto, elas não poderão conversar com você.
Portanto, substitua 127.0.0.1 aqui pelo endereço do seu próprio computador que pode ser acessado por outros membros da rede. Meu endereço aqui é 192.168.1.61
. OK, posso abri-lo no navegador http://192.168.1.61:3001/index.html
, porque não há problema com a depuração local, então também contei esse endereço com confiança para meus colegas na mesma rede.
problema encontrado
Nesse ponto, surge um problema: eu mesmo posso fazer login na interface de bate-papo, mas ninguém mais pode.
De acordo com a saída do console dos navegadores de outras pessoas, pode-se ver que todos eles se conectaram à 192.168.1.61:3014
porta e depois se conectaram novamente 127.0.0.1:3050
, portanto, não conseguiram fazer login.
E 3014
a porta é gate
o servidor, então o problema está aqui, vamos continuar a depuração.
Após algumas trocas de ponto de interrupção, pode-se descobrir que gateHandler.queryEntry
ele finalmente executou a função na linha 39next
.
-
var res = dispatcher.dispatch(uid, connectors);
-
next(null, {
-
code: 200,
-
host: res.host,
-
port: res.clientPort
-
});
host
Pode-se ver que o uso do conteúdo retornado vem de res.host
, e vem do arquivo de configuração.res
connectors
connectors
E as entradas de configuraçãogame-server/config/servers.json
do próximo connector
servidor podem ser vistas claramente ."host":"127.0.0.1"
Resolva o problema
Encontrei a fonte e imediatamente substituí tudo aqui 127.0.0.1
pela minha própria máquina 192.168.1.61
. E reinicie Chat
o servidor.
Quando o colega atualizar a visita novamente, ele poderá fazer o login.
escrito atrás
Pessoas atentas podem descobrir que o endereço IP conectado ao depurador é 127.0.0.1 , mas você pode estar pensando, como se chama "Remote Deubgger", deve ser possível conectar a 127.0.0.1
outros IPs, certo?
Eu também acho. No entanto, isso não pode ser feito sem a ajuda de outras ferramentas.
Ou seja, sem a ajuda de uma ferramenta de proxy, não há como se conectar à 127.0.0.1
porta de depuração que não seja o endereço.
Você pode usar o método e o código no final do artigo Wiki oficial do NodeJS (após Ctrl-F, procure por "Você provavelmente notou") para completar uma ferramenta de proxy. Para depurar o código implantado para execução no servidor remoto.