Apa cara termudah untuk men-debug kode Scala yang dikelola oleh sbt menggunakan debugger bawaan IntelliJ? Dokumentasi dari "RunningSbt" dari situs kode google sbt mencantumkan perintah untuk menjalankan kelas utama untuk suatu proyek atau pengujian, tetapi tampaknya tidak ada perintah untuk debugging.
Pertanyaan tindak lanjut: apa cara termudah untuk memasang debugger IntelliJ ke Jetty saat menggunakan perintah jetty-run sbt?
scala
intellij-idea
jetty
sbt
Matthew
sumber
sumber
Jawaban:
Untuk debugging biasa di IntelliJ, Anda dapat menggunakan konfigurasi run / debug Aplikasi dengan cara biasa, terlepas dari apakah Anda menggunakan sbt untuk mengompilasi kode Anda.
Untuk terhubung ke aplikasi Anda yang berjalan di Jetty, Anda harus membuat konfigurasi debug jarak jauh. Saat Anda melakukannya, IntelliJ akan memberi Anda sekumpulan argumen baris perintah untuk menjalankan JVM jarak jauh - seperti
Luncurkan sbt dengan argumen ini dan kemudian jalankan
jetty-run
. Terakhir, luncurkan konfigurasi debug jarak jauh Anda di IntelliJ. Utas ini mungkin berguna.sumber
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
jetty-run
di prompt sbt.sbt -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
?sbt -jvm-debug 5005
.Ada tanda yang sangat nyaman
-jvm-debug
di paket SBT resmi untuk Mac, Linux & Windows . Anda dapat menggunakan tanda tersebut untuk menentukan port debug:Di bawah penutup , ini memulai JVM untuk SBT dengan mantra debugging verbose tipikal:
Anda sekarang dapat menjalankan kode Anda seperti biasa, misalnya dengan
run
perintah sbt .Mengonfigurasi IntelliJ untuk menyambung ke kode yang sedang berjalan ...
Sekarang Anda menghubungkan IntelliJ ke proses yang sedang berjalan menggunakan konfigurasi Remote Debug . Perhatikan bahwa atas 3 bidang dalam formulir ini, sementara menakutkan, hanya untuk Anda untuk menyalin teks keluar dari, daripada ke (mereka memberikan verbose debug mantera tersebut di atas, yang
-jvm-debug
sudah mengurus untuk Anda) - hanya konfigurasi Anda dapat mengubah diSettings
bagian tengah ke bawah:sumber
-jvm-debug
parameter, dan mengirimkannya sebagai permintaan tarik - Anda memiliki peluang bagus untuk menguntungkan semua orang yang menemukan diri mereka di platform yang sama.Saya juga mengalami masalah dengan ini, jadi dengan risiko menjadi terlalu detail, inilah yang saya lakukan:
MEMPERSIAPKAN
Buat konfigurasi run untuk sbt jetty-run
Buat konfigurasi debug untuk debugging jarak jauh
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
(pastikan untuk mengklik OK untuk benar-benar membuat konfigurasi)Siapkan plugin sbt untuk menjalankan opsi vm di atas
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
di kotak parameter VM, setelah yang sudah adaDEBUGGING
sumber
sbt -jvm-debug 5005 console
, kemudian mengatur breakpoint di intelllJ Idea, jalankan debug.sbt -jvm-debug 5005 console
tidak berhasil untuk saya, tetapisbt -jvm-debug 5005
berhasil.Yang ini berfungsi untuk saya setiap saat, dan satu-satunya hal yang perlu Anda siapkan adalah debugging jarak jauh di IntelliJ; Saya memulai SBT dengan parameter JVM dari terminal di IntelliJ:
Setelah itu saya dapat memulai debugging jarak jauh di localhost: 5005
sumber
Saya menambahkan jawaban lain di sini, karena saya menemukan pertanyaan ini ketika mencari masalah terkait: Debugging tes kelas menggunakan breakpoints.
Saya menggunakan ScalaTest, dan saya biasanya menjalankan suite menggunakan perintah 'test-only' sbt. Sekarang ketika saya ingin menggunakan debugger interaktif, saya dapat melakukan hal berikut:
Buat Konfigurasi Run / Debug baru dengan tipe 'ScalaTest', masukkan nama "Test Class:" utama, dan pilih "Before launch: Run SBT Action 'test-compile'". Itu saja, Anda sekarang dapat menempatkan breakpoint di sumber pengujian, dan menjalankan konfigurasi ini.
sumber
Tak satu pun dari jawaban atau tautan yang diberikan ini berhasil untuk saya, jadi setelah saya menemukan jawabannya, saya pikir saya akan membagikan ...
termasuk pemahaman latar belakang yang tidak saya miliki ketika saya mulai ...
Ini sebagian besar didasarkan pada instruksi di sini hanya dengan penjelasan tambahan yang membawa saya melewatinya.
Lingkungan Saya: Scala 2.10.2, SBT 0.13, dan IntelliJ 13.1
Latar Belakang:
Apa itu Debugging?
Apa itu Debugging Jarak Jauh?
Mengacu pada tautan di atas, penjelasan / modifikasi berikut berguna:
sumber
Saya telah berjuang dengan debugging juga pada Windows dengan aplikasi Spray-can / Akka / Scala yang dibangun melalui SBT, menggunakan Intellij. Menyatukan berbagai saran, pendekatan paling sederhana bagi saya adalah:
Pastikan Anda memiliki sbt.Revolver di file proyek / plugsin.sbt Anda, misalnya
addSbtPlugin ("io.spray"% "sbt-revolver"% "0.7.1")
Setel opsi java di file build.sbt Anda:
javaOptions: = Seq ("- Xdebug", "-Xrunjdwp: transport = dt_socket, server = y, suspend = y, address = 5005")
Secara khusus gunakan opsi suspend = y. Ini akan menahan aplikasi sampai Anda menghubungkan debugger jarak jauh dari Intellij
Siapkan konfigurasi debugger di Intellij melalui menu Run / Edit Configurations. Tekan tombol +, pilih opsi "Remote". Pastikan entri cocok dengan opsi java di atas, khususnya alamat port 5005. Beri nama konfigurasi seperti 'Spray'.
Dari konsol SBT Anda, gunakan perintah re-start. Anda harus melihat alamat port 5005 di keluaran umpan balik.
Di Intellij, atur breakpoint Anda.
Dari Intellij, pilih Run \ Debug 'Spray'. Ini harus terhubung ke server web kaleng semprot. Anda seharusnya dapat melihat banyak utas di jendela debug.
Berhati-hatilah karena beberapa petunjuk Dapatkan di Spray tampaknya dijalankan saat memulai tetapi tidak berulang kali saat memanggil situs web.
sumber
Menggunakan Scala 2.10 dan SBT 0.12, saya membuatnya berfungsi seperti ini: http://tuliodomingos.blogspot.com.es/2014/01/scala-remote-debugging-in-sbts-jetty.html
sumber
Untuk apa itu Windows folk, edit
%SBT_HOME%\bin\sbt.bat
dan temukan baris kode berikut:lalu gantilah dengan kode ini:
Yang terbaik yang bisa saya lakukan untuk mendapatkan perilaku yang sama
-jvm-debug
saat terlihat di peluncur skrip BashNB. Saya tidak berpikir
%SBT_HOME%
sebenarnya ada di luar skrip ini, kecuali Anda membuat secara eksplisit di lingkungan Anda, tetapi bagaimanapun Anda mengerti maksudnya: Dsumber
File-> Pengaturan-> Pengaturan Lain-> Parameter SBT VM -Xmx512M -XX: MaxPermSize = 256M -Xdebug -Xrunjdwp: transport = dt_socket, server = y, suspend = n, address = 5005
Jalankan-> Edit Konfigurasi Tekan + lalu pilih remote Tekan Terapkan
Sekarang di konsol SBT (Dimulai di dalam oleh intelliJ) ketika Anda menjalankan perintah 'run' Anda akan melihat "Mendengarkan transportasi dt_socket di alamat: 5005"
Sekarang tekan Run-> Debug. Anda akan melihat menu debug di bawah ini diaktifkan. Ini memiliki dua tab Debugger dan Konsol.
Gunakan F7 untuk dari baris berikutnya ke baris berikutnya
Saya memilih suspend menjadi n. Dengan itu menjadi y ketika saya menjalankan perintah run itu macet
sumber
coba ini
sumber
Saya juga mendapat masalah yang sama, saya suka berbagi bagaimana saya menyelesaikannya. Omong-omong saya menggunakan Ubuntu 14.04 dan IntelliJ 15.
Dalam Pengaturan -> SBT -> Disisipkan di bawah baris di kotak teks Parameter VM:
-XX: MaxPermSize = 384M -Xdebug -Xrunjdwp: transport = dt_socket, server = y, suspend = n, address = 5005
Buka Termilal di IntelliJ dan jalankan:
sbt -jvm-debug 5005
Catatan: Anda akan melihat baris ini di terminal: "Mendengarkan transportasi dt_socket di alamat: 5005"
Edit Konfigurasi -> Klik + -> Pilih 'Remote'
Pilih DebugMyModule di
Edit Configurations
kotak daftar dan klik Debug .Catatan: Anda akan melihat Tampilan Debug dibuka dan di Konsol Debug Anda akan melihat "Tersambung ke VM target, alamat
'127.0.0.1:5005'
:, transport: 'socket'"Tempatkan breakpoint dalam beberapa kasus pengujian di Testclass Anda.
Datanglah ke Terminal tempat Anda menjalankan "
sbt -jvm-debug 5005
" dan berlari seperti di bawah iniMisalnya: com.myproject.module.AddServiceTest [Spec]
Anda dapat melihat debug dimulai di breakpoint kasus pengujian Anda.
sumber
Plugin AttachMe IntelliJ berpotensi lebih cepat dalam melampirkan debugger tanpa harus mengutak-atik nomor port:
Posting blog dan readme memiliki petunjuk penyiapan, namun saya harus mengubahnya sedikit agar dapat berfungsi di mesin saya
Unduh
installer.sh
skrip dari repo resmichmod u+x installer.sh
./installer.sh
/.config/attachme/agent.jar
dan membuat~/.attachme
fileUbah
~/.attachme
untuk menampungInstal plugin Attachme yang sesuai dan mulai ulang:
IntelliJ | Preferences | Plugins
Attachme
konfigurasi run:Run | Edit configurations... | Add new configuration | Attachme debugger registry | OK
Setelah kesalahan satu kali ini, kita dapat memasang debugger secara otomatis dengan
Attachme
jalankan konfigurasisource ~/.attachme
sbt "runMain example.Hello"
sumber
Sesuai jawaban Roberto Tyley di atas, tetapi di Windows kita juga perlu mengatur variabel lingkungan berikut setelah menginstal sbt:
SBT_HOME
C: \ Program Files (x86) \ sbt \
[atau di mana pun sbt diinstal]
SBT_OPTS
-Xdebug -runjdwp: transport = dt_socket, server = y, suspend = n, address = 5005
[per contoh IntelliJ RT]
Tambahkan ke jalur:% SBT_HOME% \ bin;% SBT_OPTS%
Kemudian jalankan perintah berikut pada baris perintah dalam folder proyek "sbt run -jvm -debug 5005".
Jika ini bekerja dengan benar, baris perintah awalnya akan menampilkan baris kembali "Mendengarkan transportasi dt_socket di alamat: 5005".
Setel breakpoint di IntelliJ.
Buka situs web di browser untuk memicu breakpoint debugger misalnya " http: // localhost: 9000 / ".
sumber