Qual é a maneira mais fácil de depurar o código Scala gerenciado pelo sbt usando o depurador interno do IntelliJ? A documentação de "RunningSbt" do site de códigos do google da sbt lista comandos para executar a classe principal de um projeto ou de testes, mas parece não haver comandos para depuração.
Pergunta de acompanhamento: qual é a maneira mais fácil de conectar o depurador do IntelliJ ao Jetty ao usar o comando jetty-run do sbt?
scala
intellij-idea
jetty
sbt
Mateus
fonte
fonte
Respostas:
Para depuração comum no IntelliJ, você pode usar uma configuração de execução / depuração de aplicativo da maneira usual, independentemente de estar usando sbt para compilar seu código.
Para se conectar ao seu aplicativo em execução no Jetty, você precisará criar uma configuração de depuração remota. Quando você faz isso, o IntelliJ fornece um conjunto de argumentos de linha de comando para executar a JVM remota - algo como
Inicie o sbt com esses argumentos e execute
jetty-run
. Por fim, inicie sua configuração de depuração remota no IntelliJ. Este tópico pode ser útil.fonte
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
jetty-run
no prompt sbt.sbt -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
?sbt -jvm-debug 5005
.Há uma
-jvm-debug
bandeira muito conveniente nos pacotes oficiais do SBT para Mac, Linux e Windows . Você pode usar o sinalizador para especificar a porta de depuração:Nos bastidores , isso inicia a JVM para SBT com o encantamento detalhado típico de depuração:
Agora você pode executar seu código normalmente, por exemplo, com o
run
comando sbt .Configurando o IntelliJ para conectar-se ao código em execução ...
Agora você conecta o IntelliJ ao processo em execução usando uma configuração de Depuração Remota . Note-se que os superiores 3 campos deste formulário, enquanto assustador, são apenas para você copiar o texto fora de, em vez de em (eles estão dando o verbose de depuração encantamento especificado acima, que
-jvm-debug
já cuida para você) - a única configuração você pode mudar está naSettings
seção até a metade:fonte
-jvm-debug
parâmetro e enviá-lo como uma solicitação pull - você tem uma boa chance de beneficiar todos que se encontrarem na mesma plataforma.Também tive alguns problemas com isso, então, correndo o risco de ser excessivamente detalhado, eis o que fiz:
CONFIGURAÇÃO
Crie uma configuração de execução para sbt jetty-run
Crie uma configuração de depuração para depuração remota
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
(clique em OK para criar a configuração)Configure o plugin sbt para executar as opções vm acima
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
na caixa de parâmetros da VM, depois das que já estão láDEBUGGING
fonte
sbt -jvm-debug 5005 console
, em seguida, definir o ponto de interrupção no intelllJ Idea, executar depuração.sbt -jvm-debug 5005 console
não funcionou para mim, massbt -jvm-debug 5005
funcionou.Este funciona para mim todas as vezes, e a única coisa que você precisa configurar é a depuração remota no IntelliJ; Eu inicio o SBT com parâmetros da JVM a partir do terminal no IntelliJ:
Depois disso, posso iniciar a depuração remota no localhost: 5005
fonte
Estou adicionando outra resposta aqui, porque encontrei esta pergunta ao procurar um problema relacionado: Depurando classes de teste usando pontos de interrupção.
Estou usando o ScalaTest e normalmente executo um conjunto usando o comando 'test-only' do sbt. Agora, quando quero usar o depurador interativo, posso fazer o seguinte:
Crie uma nova Configuração de Execução / Depuração do tipo 'ScalaTest', coloque o nome principal "Classe de Teste:" e escolha "Antes de iniciar: Execute a Ação do SBT 'compilar' '. É isso, você pode colocar pontos de interrupção agora nas fontes de teste e executar esta configuração.
fonte
Nenhuma dessas respostas ou links fornecidos funcionou para mim; portanto, depois que eu descobri isso, pensei em compartilhar ...
incluindo o conhecimento de fundo que eu não tinha quando comecei ...
Isso se baseia principalmente nas instruções aqui, apenas com explicações adicionais que me levaram a isso.
Meu ambiente: Scala 2.10.2, SBT 0.13 e IntelliJ 13.1
Fundo:
O que é depuração?
O que é depuração remota?
Referenciando o link acima, as seguintes explicações / modificações são úteis:
fonte
Também estou lutando com a depuração no Windows com um aplicativo Spray-can / Akka / Scala criado via SBT, usando o Intellij. Reunindo várias sugestões, a abordagem mais simples para mim foi:
Verifique se você possui sbt.Revolver no arquivo project / plugsin.sbt, por exemplo
addSbtPlugin ("io.spray"% "sbt-revolver"% "0.7.1")
Defina javaoptions no arquivo build.sbt:
javaOptions: = Seq ("- Xdebug", "-Xrunjdwp: transport = dt_socket, servidor = y, suspensão = y, endereço = 5005")
Em particular, use a opção suspend = y. Isso manterá o aplicativo até você conectar um depurador remoto da Intellij
Defina uma configuração do depurador no Intellij através do menu Executar / Editar Configurações. Pressione o botão +, selecione a opção "Remoto". Verifique se as entradas correspondem às javaoptions acima, em particular ao endereço da porta 5005. Atribua à configuração um nome como 'Spray'.
No console do SBT, use o comando reiniciar. Você deve ver o endereço da porta 5005 na saída de feedback.
No Intellij, defina seus pontos de interrupção.
No Intellij, selecione o Run \ Debug 'Spray'. Isso deve se conectar ao servidor da web de lata de spray. Você poderá ver muitos threads na janela de depuração.
Lembre-se de que algumas das diretivas Get do Spray parecem ser executadas na inicialização, mas não repetidamente ao ligar para o site.
fonte
Usando o Scala 2.10 e o SBT 0.12, consegui funcionar assim: http://tuliodomingos.blogspot.com.es/2014/01/scala-remote-debugging-in-sbts-jetty.html
fonte
Para o que vale a pena no Windows, edite
%SBT_HOME%\bin\sbt.bat
e localize as seguintes linhas de código:substitua-os por este código:
O melhor que posso fazer para obter o mesmo comportamento
-jvm-debug
quando visto no iniciador de scripts BashNB. Eu não acho
%SBT_HOME%
que exista realmente fora deste script, a menos que você tenha criado explicitamente em seu ambiente, mas de qualquer maneira você entendeu: Dfonte
Arquivo-> Configurações-> Outras Configurações-> Parâmetros da VM do SBT -Xmx512M -XX: MaxPermSize = 256M -Xdebug -Xrunjdwp: transport = dt_socket, servidor = y, suspensão = n, endereço = 5005
Executar-> Editar configurações Pressione + e selecione remoto Pressione Aplicar
Agora, no console do SBT (iniciado dentro pelo intelliJ), quando você executa o comando 'run', você verá "Ouvindo o transporte dt_socket no endereço: 5005"
Agora pressione Executar-> Depurar. Você verá os menus de depuração abaixo ativados. Possui duas guias Depurador e Console.
Use F7 para da próxima linha para a próxima
Eu escolhi suspender para ser n. Sendo y quando eu executei o comando run, ele estava preso
fonte
tente isso
fonte
Eu também tenho o mesmo problema, gosto de compartilhar como resolvi. A propósito, eu estou usando o Ubuntu 14.04 e IntelliJ 15.
Em Configuração -> SBT -> Colado abaixo da linha na caixa de texto Parâmetros da VM:
-XX: MaxPermSize = 384M -Xdebug -Xrunjdwp: transporte = dt_socket, servidor = y, suspensão = n, endereço = 5005
Abriu o Termilal no IntelliJ e execute:
sbt -jvm-debug 5005
Nota: você deve ver esta linha no terminal: "Escutando transporte dt_socket no endereço: 5005"
Editar configurações -> Clique em + -> Selecionar 'Remoto'
Selecione DebugMyModule na
Edit Configurations
caixa de listagem e clique em Debug .Nota: Você verá a tela Debug aberta e, no console de depuração, poderá ver "Conectado à VM de destino, endereço:,
'127.0.0.1:5005'
transporte: 'soquete'"Coloque pontos de interrupção em alguns casos de teste em sua classe de teste.
Venha para o Terminal, onde você corre "
sbt -jvm-debug 5005
" e corre como abaixoPor exemplo: com.myproject.module.AddServiceTest [Spec]
Você pode ver a depuração iniciada no ponto de interrupção do seu caso de teste.
fonte
O plug-in AttachMe IntelliJ é uma maneira potencialmente mais rápida de anexar o depurador sem precisar mexer nos números das portas:
O post e o leia - me do blog têm instruções de configuração, no entanto, tive que alterá-los um pouco para que funcionasse na minha máquina
Download do
installer.sh
script do repositório oficialchmod u+x installer.sh
./installer.sh
/.config/attachme/agent.jar
e criar~/.attachme
arquivoModifique
~/.attachme
para conterInstale o plug-in Attachme correspondente e reinicie:
IntelliJ | Preferences | Plugins
Attachme
configuração de execução:Run | Edit configurations... | Add new configuration | Attachme debugger registry | OK
Após essas travessuras pontuais, podemos anexar um depurador automaticamente
Attachme
configuração de execuçãosource ~/.attachme
sbt "runMain example.Hello"
fonte
Conforme a resposta de Roberto Tyley acima, mas no Windows também precisamos definir as seguintes variáveis de ambiente após a instalação do sbt:
SBT_HOME
C: \ Arquivos de Programas (x86) \ sbt \
[ou onde quer que o sbt esteja instalado]
SBT_OPTS
-Xdebug -runjdwp: transporte = dt_socket, servidor = y, suspensão = n, endereço = 5005
[pelo exemplo IntelliJ da RT]
Adicionar ao caminho:% SBT_HOME% \ bin;% SBT_OPTS%
Em seguida, execute o seguinte na linha de comando na pasta do projeto "sbt run -jvm -debug 5005".
Se isso estiver funcionando corretamente, a linha de comando exibirá inicialmente uma linha re "Escutando transporte dt_socket no endereço: 5005".
Defina o ponto de interrupção no IntelliJ.
Abra o site no navegador para acionar o ponto de interrupção do depurador, por exemplo, " http: // localhost: 9000 / ".
fonte