IntelliJ의 내장 디버거를 사용하여 sbt에서 관리하는 Scala 코드를 디버깅하는 가장 쉬운 방법은 무엇입니까? sbt의 Google 코드 사이트의 “RunningSbt” 문서 에는 프로젝트 또는 테스트의 기본 클래스를 실행하기위한 명령이 나열되어 있지만 디버깅 명령이없는 것 같습니다.
후속 질문 : sbt의 jetty-run 명령을 사용할 때 IntelliJ의 디버거를 Jetty에 연결하는 가장 쉬운 방법은 무엇입니까?
답변
IntelliJ에서 일반적인 디버깅의 경우 sbt를 사용하여 코드를 컴파일하는지 여부에 관계없이 일반적인 방식으로 응용 프로그램 실행 / 디버그 구성을 사용할 수 있습니다.
Jetty에서 실행중인 애플리케이션에 연결하려면 원격 디버그 구성을 만들어야합니다. 이렇게하면 IntelliJ는 원격 JVM을 실행하기위한 명령 줄 인수 집합을 제공합니다.
-Xdebug -Xrunjdwp : transport = dt_socket, server = y, suspend = n, address = 5005
이러한 인수로 sbt를 시작한 다음 jetty-run
. 마지막으로 IntelliJ에서 원격 디버그 구성을 시작합니다. 이 스레드 가 유용 할 수 있습니다.
답변
Mac, Linux 및 Windows 용 -jvm-debug
공식 SBT 패키지 에는 매우 편리한 플래그가 있습니다. 플래그를 사용하여 디버그 포트를 지정할 수 있습니다.
sbt -jvm-debug 5005
커버 아래 ,이 디버깅 주문 자세한 전형적인와 SBT의 JVM을 시작합니다 :
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
이제 sbt를 사용하여 코드를 정상적으로 실행할 수 있습니다. run
명령을 .
실행중인 코드에 연결하도록 IntelliJ 구성 …
이제 원격 디버그 구성을 사용하여 IntelliJ를 실행중인 프로세스에 연결 합니다 . 이 양식에서 상위 3 개 필드, 무서운 동안, 당신은 텍스트를 복사 단지에 대한 참고 아웃 (주문을 디버깅하는 것은 위에서 지정한 자세한 그들이의를 포기하고 대신에보다의 -jvm-debug
당신을 위해 이미 처리 소요) – 유일한 구성 변경할 수있는 Settings
섹션은 중간 아래에 있습니다.
답변
나는 이것에도 약간의 문제가 있었기 때문에 지나치게 자세하게 될 위험이 있으므로 여기에 내가 한 일이 있습니다.
설정
-
sbt jetty-run에 대한 실행 구성 만들기
- 실행> 구성 편집으로 이동하십시오.
- [+] 아이콘을 클릭하고 Scala Compilation Server를 선택합니다.
- 원하는 이름을 입력하고 “Run SBT Action”확인란을 클릭하고 […]에서 SBT Action jetty-run을 선택합니다.
-
원격 디버깅을위한 디버그 구성 만들기
- 실행> 구성 편집으로 이동하십시오.
- [+] 아이콘을 클릭하고 원격을 선택합니다.
- 원하는 이름을 입력하고 줄을 복사합니다
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
(실제로 구성을 만들려면 확인을 클릭해야합니다).
-
위의 vm 옵션을 실행하도록 sbt 플러그인 설정
- 파일> 설정> SBT로 이동합니다.
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
VM 매개 변수 상자에 이미있는 항목 뒤에 줄 을 붙여 넣 습니다.
디버깅
- 원하는대로 중단 점 설정
- 위에서 만든 sbt jetty-run 구성을 선택하고 Run> Run을 선택하거나 녹색 화살표를 클릭하여 jetty 웹 서버를 시작합니다.
- 위에서 만든 원격 디버깅 구성을 선택하고 실행> 디버그를 선택하거나 버그 아이콘을 클릭하여 원격 디버거를 시작합니다.
답변
이것은 매번 나를 위해 작동하며 설정해야 할 유일한 것은 IntelliJ에서 원격 디버깅입니다. IntelliJ의 터미널에서 JVM 매개 변수로 SBT를 시작합니다.
sbt -J-Xdebug -J-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
그 후 localhost : 5005에서 원격 디버깅을 시작할 수 있습니다.
답변
관련 문제를 찾을 때이 질문을 발견했기 때문에 여기에 또 다른 대답을 추가하고 있습니다. 중단 점을 사용하여 테스트 클래스 디버깅.
저는 ScalaTest를 사용하고 있으며 일반적으로 sbt의 ‘테스트 전용’명령을 사용하여 제품군을 실행합니다. 이제 대화 형 디버거를 사용하려면 다음을 수행 할 수 있습니다.
‘ScalaTest’유형의 새 실행 / 디버그 구성을 만들고 기본 “테스트 클래스 :”이름을 입력 한 다음 “시작 전 : SBT 작업 ‘테스트 컴파일’실행”을 선택합니다. 이제 테스트 소스에 중단 점을 배치하고이 구성을 실행할 수 있습니다.
답변
이 답변이나 제공된 링크 중 어느 것도 저에게 효과가 없었기 때문에 이것을 알아 내면 공유 할 것이라고 생각했습니다 …
내가 시작할 때 가지지 못한 배경 이해를 포함하여 …
이것은 대부분 여기에 설명 된 추가 설명을 기반으로 합니다.
내 환경 : Scala 2.10.2, SBT 0.13 및 IntelliJ 13.1
배경:
- 어떤 이유로 든 SBT를 사용하여 IntelliJ에서 Scala를 컴파일하는 것은 Maven 프로젝트와 같은 방식으로 통합되지 않으므로 디버깅이 정말 쉽습니다.
- SBT로 컴파일 할 때 별도의 프로세스에서 컴파일하므로 원격 디버깅이 필요하다는 것을 이해 한 바 있습니다.
디버깅이란?
- 디버깅은 코드 실행 흐름을 제어 할 수있는 JVM 또는 앱을 실행할 수있는 모드입니다.
- 사용하는 디버깅 도구는 “다음 코드 줄을 실행 한 다음 다시 일시 중지”또는 “계속 실행”또는 “여기에 메모리에 저장된 변수 값 가져 오기”를 알리는 명령을 디버깅 엔진에 실행할 수 있습니다.
원격 디버깅이란 무엇입니까?
- 원격 디버깅은 네트워크 연결 (소켓)을 통해 디버깅합니다.
- 이 네트워크 연결을 통해 원격 시스템에서 디버그 엔진에 명령을 실행할 수 있습니다.
- 이것은 원격 서버에서 실행되는 코드를 디버깅하려는 경우에 유용하지만
- 또한 SBT에서 실행되는 Scala 코드와 IntelliJ 환경과 별도로 Jetty 또는 Tomcat과 같은 웹 서버를 통해 실행되는 상황에 유용합니다.
위의 링크를 참조하면 다음 설명 / 수정이 유용합니다.
- 네트워크 소켓을 설정할 때 사용할 포트를 포함하여 “디버깅 활성화”JVM 설정으로 SBT를 시작하도록 IntelliJ를 설정합니다. (변경되지 않음) 명명 된 VM 매개 변수를 IntelliJ 설정에 추가합니다.
- 여기의 포트 번호가 1 단계의 JVM 설정과 일치하는지 확인하십시오.
- SBT를 시작할 때 SBT 콘솔 플러그인 (1 단계에서 구성한 것)에서 수행해야합니다. IntelliJ 외부에서 (명령 줄에서) SBT를 실행하는 경우 1 단계와 동일한 VM 매개 변수로 SBT를 시작해야합니다 (이 작업은 수행하지 않았으므로 지침 없음). 이 단계가 끝나면 SBT가 실행되고 (하지만 코드는 아직 실행되지 않음) JVM이 원격 디버깅을 위해 설정됩니다.
- 그러면 3 단계에서 시작한 JVM에 연결되는 IntelliJ 디버깅 도구가 시작됩니다.
- 마지막으로 SBT 콘솔에서 컴파일을 시작합니다. 연속 컴파일 명령을 포함한 모든 컴파일 명령으로이 작업을 수행 할 수 있습니다. 계속해서 재 컴파일하면 재 컴파일이 발생하지만 디버거에 의해 코드 실행이 일시 중지되는 동안에는 발생하지 않습니다.
답변
Intellij를 사용하여 SBT를 통해 빌드 된 Spray-can / Akka / Scala 앱을 사용하여 Windows에서도 디버깅에 어려움을 겪고 있습니다. 다양한 제안을 종합하여 가장 간단한 접근 방식은 다음과 같습니다.
-
프로젝트 /plugsin.sbt 파일에 sbt.Revolver가 있는지 확인하십시오.
addSbtPlugin ( “io.spray”% “sbt-revolver”% “0.7.1”)
-
build.sbt 파일에서 javaoptions를 설정하십시오.
javaOptions : = Seq ( “-Xdebug”, “-Xrunjdwp : transport = dt_socket, server = y, suspend = y, address = 5005”)
특히 suspend = y 옵션을 사용하십시오. Intellij에서 원격 디버거를 연결할 때까지 앱이 유지됩니다.
-
Run / Edit Configurations 메뉴를 통해 Intellij에서 디버거 구성을 설정합니다. + 버튼을 누르고 “원격”옵션을 선택합니다. 항목이 위의 javaoptions, 특히 포트 주소 5005와 일치하는지 확인하십시오. 구성에 ‘Spray’와 같은 이름을 지정하십시오.
-
SBT 콘솔에서 다시 시작 명령을 사용하십시오. 피드백 출력에 5005 포트 주소가 표시되어야합니다.
-
Intellij에서 중단 점을 설정하십시오.
-
Intellij에서 Run \ Debug ‘Spray’를 선택합니다. 이것은 스프레이 캔 웹 서버에 연결되어야합니다. 디버그 창에서 많은 스레드를 볼 수 있어야합니다.
-
스프레이의 일부 Get 지시문은 시작할 때 실행되지만 웹 사이트를 호출 할 때 반복적으로 실행되지는 않습니다.