Bagaimana cara debug skrip Ruby [ditutup]

153

Saya menyalin kode Ruby berikut ini dari Internet dan membuat beberapa perubahan tetapi tidak berhasil.

Apa yang bisa saya lakukan untuk men-debug program sendiri?

Andrew Grimm
sumber
1
Voting untuk dibuka kembali. OP jelas menginginkan debug langkah mirip GDB.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Jawaban:

145

Gunakan Pry ( GitHub ).

Instal melalui:

$ gem install pry
$ pry

Kemudian tambahkan:

require 'pry'; binding.pry

ke dalam program Anda.

Pada pry0.12.2 Namun, ada perintah ada navigasi seperti next, break, dll Beberapa permata lainnya juga menyediakan ini, lihat misalnya pry-byedebug.

horseyguy
sumber
10
Saya juga merekomendasikan menggunakan Pry (pasti pengubah hidup!) .. Setelah diinstal dan diperlukan dalam program Anda, pengaturan breakpoint semudah menulis binding.pry. Itu juga dilengkapi dengan penyelesaian warna, pencarian dokumentasi, dan kemungkinan untuk secara dinamis mengedit dan memuat kembali suatu metode ..
Andrea Fiore
5
Situs web Pry tersedia di sini: pryrepl.org .
shadowbq
4
PrySaya byebughebat, tetapi bukan sebagai langkah pertama Anda saat debugging. Dalam kebanyakan kasus, mengajukan pengecualian dengan raise object.inspectakan menyelesaikan masalah Anda lebih cepat daripada membuka sesi IRB. Saya sarankan hanya menggunakan konsol debugger sekali lagi solusi sederhana seperti menaikkan pengecualian tidak dapat menyelesaikan masalah Anda.
Kelsey Hannan
3
Apakah ada cara dengan kode langkah tunggal pry? Saya tidak dapat menemukan cara melakukannya; dan itulah yang saya harapkan dari debugger.
jpetazzo
2
@ jpetazzo ya, dengan mengetikkan 'berikutnya'
marcbest
114
  1. Di Ruby:

    ruby -rdebug myscript.rb 

    kemudian,

    • b <line>: menempatkan break-point
    • dan n(ext)atau s(tep)danc(ontinue)
    • p(uts) untuk tampilan

    (seperti perl debug)

  2. In Rails: Luncurkan server dengan

    script/server --debugger

    dan tambahkan debuggerkode.

germanlinux
sumber
7
-Rebug adalah sampah. Dan tidak dirawat. Gunakan Pry (lihat jawaban lainnya).
Snowcrash
3
@SnowCrash - Mengapa Anda mengatakan itu -r debugadalah sampah?
sid smith
8
dengan -rdebug: tidak perlu mengubah file sumber untuk melakukan debug
germanlinux
2
Untuk aplikasi Ruby / Rails baru, Pry adalah jawaban yang benar. Tapi saya menghabiskan lebih dari satu jam mencoba untuk menemukan versi kuno Pry untuk dijalankan pada aplikasi Rails 2.2 dengan versi spesifik facetsdalam persyaratan permata, dan tidak berhasil. Untuk aplikasi Rails kuno ruby-debugagak buruk tetapi menyelesaikan pekerjaan.
Abe Voelker
56

Direkomendasikan sebagai pegangan tangga: gunakan pry! Saya hanya bisa menyetujui ini.

pry adalah pengganti yang jauh lebih baik daripada irb.

Anda perlu menambahkan

require 'pry'

ke file sumber Anda dan kemudian masukkan breakpoint dalam kode sumber Anda dengan menambahkan

binding.pry

di tempat Anda ingin melihat hal-hal (ini seperti memicu breakpoint di lingkungan IDE klasik)

Setelah program Anda menyentuh

binding.pry

baris, Anda akan dilemparkan ke dalam pry repl, dengan semua konteks program Anda di tangan, sehingga Anda dapat menjelajahi segala sesuatu di sekitar, menyelidiki semua objek, mengubah keadaan, dan bahkan mengubah kode dengan cepat.

Saya percaya Anda tidak dapat mengubah kode metode yang Anda gunakan saat ini, jadi Anda sedihnya tidak dapat mengubah baris berikutnya yang akan dieksekusi. Tetapi kode ruby ​​yang baik cenderung menjadi satu baris ;-)

edx
sumber
30

Debugging dengan menaikkan pengecualian adalah jauh lebih mudah daripada menyipitkan mata melaluiprintpernyataan log, dan untuk sebagian besar bug, yang umumnya jauh lebih cepat daripada membuka sebuah debugger irb sepertipryataubyebug. Alat-alat itu tidak harus selalu menjadi langkah pertama Anda.


Debugging Ruby / Rails Dengan Cepat:

1. Metode Cepat: Angkat Exceptionlalu dan .inspecthasilnya

Cara tercepat untuk men-debug kode Ruby (terutama Rails) adalah dengan raisepengecualian di sepanjang jalur eksekusi kode Anda saat memanggil .inspectmetode atau objek (misalnya foo):

raise foo.inspect

Dalam kode di atas, raisememicu sebuah Exceptionyang menghentikan eksekusi kode Anda , dan mengembalikan pesan kesalahan yang dengan mudah berisi .inspectinformasi tentang objek / metode (yaitufoo ) pada baris yang Anda coba debug.

Teknik ini berguna untuk dengan cepat memeriksa suatu objek atau metode ( misalnya apakah itu nil? ) Dan untuk segera mengkonfirmasikan apakah baris kode bahkan mendapatkan dieksekusi sama sekali dalam konteks tertentu.

2. Fallback: Gunakan seperti debugger IRB rubybyebug ataupry

Hanya setelah Anda memiliki informasi tentang keadaan alur eksekusi kode Anda, sebaiknya Anda mempertimbangkan untuk pindah ke debugger seperti, pryatau di byebugmana Anda dapat mempelajari lebih dalam tentang keadaan objek dalam jalur eksekusi Anda.


Nasihat Umum Pemula

Ketika Anda mencoba men-debug masalah, saran yang baik adalah untuk selalu: Baca The! @ # $ Ing Pesan Kesalahan (RTFM)

Itu berarti membaca pesan kesalahan dengan hati - hati dan sepenuhnya sebelum bertindak sehingga Anda mengerti apa yang ingin disampaikannya kepada Anda. Saat Anda men-debug, ajukan pertanyaan mental berikut, dalam urutan ini , saat membaca pesan kesalahan:

  1. Apa kelas tidak referensi kesalahan? (Yaitu apakah saya memiliki kelas objek yang benar atau objek saya nil? )
  2. Apa metode melakukan referensi kesalahan? (Yaitu jenis mereka dalam metode; dapatkah saya memanggil metode ini pada jenis / kelas objek ini? )
  3. Akhirnya, dengan menggunakan apa yang dapat saya simpulkan dari dua pertanyaan terakhir saya, baris kode apa yang harus saya selidiki? (ingat: baris kode terakhir dalam stack stack belum tentu terletak di tempat masalahnya.)

Dalam jejak tumpukan perhatikan baris kode yang berasal dari proyek Anda (misalnya, baris yang dimulai dengan app/...jika Anda menggunakan Rails). 99% dari waktu masalahnya adalah dengan kode Anda sendiri.


Untuk mengilustrasikan mengapa menafsirkan dalam urutan ini penting ...

Misalnya pesan kesalahan Ruby yang membingungkan banyak pemula:

Anda menjalankan kode yang pada titik tertentu dijalankan seperti itu:

@foo = Foo.new

...

@foo.bar

dan Anda mendapatkan kesalahan yang menyatakan:

undefined method "bar" for Nil:nilClass

Pemula melihat kesalahan ini dan berpikir masalahnya adalah metode barini tidak terdefinisi . Ini bukan. Dalam kesalahan ini, bagian nyata yang penting adalah:

for Nil:nilClass

for Nil:nilClassberarti itu @fooNihil! @foobukan Foovariabel instan! Anda memiliki objek itu Nil. Ketika Anda melihat kesalahan ini, itu hanya ruby ​​mencoba untuk memberi tahu Anda bahwa metode barini tidak ada untuk objek kelas Nil. (yah! Karena kami mencoba menggunakan metode untuk objek kelas Footidak Nil).

Sayangnya, karena cara kesalahan ini ditulis ( undefined method "bar" for Nil:nilClass) mudah untuk diperdaya untuk berpikir bahwa kesalahan ini berkaitan dengan barkeberadaan undefined. Ketika tidak membaca dengan cermat kesalahan ini menyebabkan pemula secara keliru menggali rincian barmetode iniFoo , sepenuhnya melewatkan bagian dari kesalahan yang mengisyaratkan bahwa objek tersebut berasal dari kelas yang salah (dalam kasus ini: nil). Ini adalah kesalahan yang mudah dihindari dengan membaca pesan kesalahan secara keseluruhan.

Ringkasan:

Selalu hati-hati membaca seluruh pesan kesalahan sebelum memulai debugging apa pun. Itu berarti: Selalu periksa tipe kelas objek dalam pesan kesalahan terlebih dahulu , lalu metode - metodenya , sebelum Anda mulai menjalankan tumpukan kode atau baris kode apa pun yang menurut Anda kemungkinan terjadi kesalahan. 5 detik itu bisa menghemat 5 jam frustrasi.

tl; dr: Jangan menyipit di log cetak: naikkan pengecualian atau gunakan debugger irb sebagai gantinya. Hindari lubang kelinci dengan membaca kesalahan dengan cermat sebelum melakukan debug.

Kelsey Hannan
sumber
3
Sementara saya setuju dengan Anda bahwa membaca log cetak itu membosankan, saya pikir merekomendasikan untuk tidak menggunakan debugger di tempat pertama adalah saran yang sangat buruk. Menambahkan breakpoint dan memicunya adalah upaya yang persis sama dengan memunculkan pengecualian tetapi memberi Anda tampilan penuh dari kondisi aplikasi saat ini. Jika ada pertanyaan lebih lanjut yang muncul sebagai hasil dari pemeriksaan negara yang meragukan, Anda dapat menelusuri secara interaktif alih-alih menambahkan pengecualian lain dan memulai ulang aplikasi.
Patrick R.
2
@ PatrickR. Dalam pengalaman saya, IRB debuggers bukan langkah pertama yang baik ketika Anda masih mencoba menelusuri ke mana tepatnya masalah dalam kode Anda. Menambah dan menghapus banyak breakpoint IRB membutuhkan lebih banyak waktu daripada menambahkan pengecualian, dan jangan memberikan jawaban yang pasti tentang aliran kontrol kode Anda dengan cara bahwa pengecualian dapat dilakukan oleh pemula untuk menghilangkan asumsi buruk. Breakpoint IRB juga mudah dilupakan, menyebabkan kebingungan ketika permintaan hang. Jika Anda tahu persis di mana masalahnya dan perlu men-debug kondisinya, maka tentu saja, mulailah dengan debugger IRB. Tetapi seringkali itu tidak benar.
Kelsey Hannan
1
Hah! Membaca pesan kesalahan sangat membantu untuk Ruby, tetapi bahasa scripting lainnya ? Saya tidak bisa menyalahkan OP karena tidak mau repot.
kayleeFrye_onDeck
1
Reaksi awal saya mirip dengan @PatrickR., Tapi saya tetap mencoba ini. Pada akhirnya, saya menemukan ini sebagai saran yang buruk, atau mungkin dalam cahaya terbaik, saran yang disesuaikan dengan kasus penggunaan yang berbeda dari yang saya miliki. Khususnya kasus di mana (a) tidak menggunakan Rails dan (b) memiliki hasil yang salah tetapi tidak ada kesalahan atau pengecualian yang muncul, yaitu kode menghitung angka, itu hanya nomor yang salah. Mencoba menebak di mana membuat program yang akan mengeksekusi crash secara iteratif adalah strategi, tetapi ini lebih berhasil karena saya harus terus memulai ulang dan menjalankan kembali. Setiap siklus memiliki waktu mulai sendiri yang terbuang sia-sia.
Brick
20
  1. Cetak variabel bila memungkinkan. (Ini disebut printf debugging) Anda dapat melakukan ini dengan menjalankan

    STDERR.puts x.inspect

    atau

    STDERR.puts "Variable x is #{x.inspect}"

    Jika Anda ingin membuat ini lebih mudah untuk mengetik, maka Anda mungkin ingin menggunakan exemplor permata.

  2. Aktifkan peringatan. Jika Anda menjalankan rubykemudian jalankan dengan -wsaklar (misalnya ruby -w script.rb). Jika Anda menjalankannya dari irb, dan Anda menggunakan versi ruby ​​sebelum 1.9.2, ketikkan $VERBOSE = truedi awal sesi Anda. Jika Anda salah mengeja variabel instan, setelah peringatan muncul, Anda akan mendapatkannya

    peringatan: variabel instance @valeustidak diinisialisasi

  3. Memahami konsep pemotongan biner (kutipan berikut berasal dari Praktik Pengembang Agile )

    Bagilah ruang masalahnya menjadi dua, dan lihat bagian mana yang berisi masalahnya. Kemudian bagi setengah menjadi dua lagi, dan ulangi.

  4. Jika Anda berhasil dengan pemotongan biner, Anda mungkin menemukan bahwa ada satu baris yang tidak melakukan apa yang Anda harapkan. Sebagai contoh

    [1, 2, 3].include?([1,2])

    memberikan nilai false, meskipun Anda akan berpikir itu akan kembali true. Dalam hal ini, Anda mungkin ingin melihat dokumentasi. Situs web untuk dokumentasi termasuk ruby-doc.org , atau APIdock . Dalam kasus yang terakhir, Anda akan mengetik di include?sebelah kaca pembesar di dekat sudut kanan atas, pilih include?yang di Arraybawahnya (jika Anda tidak tahu apa kelasnya [1, 2, 3], ketik [1, 2, 3].classirb), dan Anda bisa memasukkan? (Array) , yang menjelaskan apa yang dilakukannya.

    Namun, jika dokumentasi tidak membantu, Anda lebih mungkin mendapatkan jawaban yang baik jika Anda dapat mengajukan pertanyaan tentang bagaimana baris tertentu tidak melakukan apa yang seharusnya, daripada mengapa seluruh skrip tidak melakukan apa Itu harus.

Andrew Grimm
sumber
7

menghapus semua hal

Selamat datang di 2017 ^ _ ^

Oke, jadi jika Anda tidak menentang untuk mencoba IDE baru, Anda dapat melakukan hal berikut secara gratis .

Instruksi Cepat

  1. Instal vscode
  2. Instal Ruby Dev Kit jika Anda belum melakukannya
  3. Instal ekstensi Ruby, ruby-linter, dan ruby-rubocop untuk vscode
  4. Secara manual instal permata apa pun yang ditentukan rubyide / vscode-ruby , jika perlu
  5. Konfigurasikan Anda launch.jsonuntuk menggunakan "cwd"dan dan "program" bidang menggunakan {workspaceRoot}makro
  6. Tambahkan bidang yang dipanggil "showDebuggerOutput"dan setel ketrue
  7. Aktifkan breakpoints di mana saja di preferensi Debug Anda "debug.allowBreakpointsEverywhere": true

Instruksi terperinci

  1. Unduh Visual Studio Code alias vscode; ini tidak sama dengan Visual Studio . Ini gratis, ringan, dan umumnya dianggap positif.
  2. Instal Ruby Dev Kit; Anda harus mengikuti instruksi di repo mereka di sini: https://github.com/oneclick/rubyinstaller/wiki/Development-Kit
  3. Selanjutnya Anda dapat menginstal ekstensi melalui browser web, atau di dalam IDE; ini untuk di dalam IDE. Jika Anda memilih yang lain, Anda bisa pergi ke sini . Arahkan ke bagian Extensions dari vscode; Anda dapat melakukan ini dengan beberapa cara, tetapi metode yang paling tahan di masa depan mungkin akan memukul F1, dan mengetik extsampai opsi yang disebut Extensions: Install Extensions menjadi tersedia. Alternatifnya adalah CtrlShiftxdan dari bilah menu atas,View->Extensions
  4. Selanjutnya Anda akan menginginkan ekstensi berikut; ini tidak 100% diperlukan, tetapi saya akan membiarkan Anda memutuskan apa yang harus disimpan setelah Anda mengutak-atik beberapa:
    • Rubi; penulis ekstensi Peng Lv
    • ruby-rubocop; ekstensi penulis misogi
    • ruby-linter; penulis ekstensi Cody Hoover
  5. Di dalam direktori script ruby ​​Anda, kami akan membuat direktori melalui command-line yang disebut .vscodedan di sana kami akan tetapi file yang disebut di launch.jsonmana kami akan menyimpan beberapa opsi konfigurasi.
    • launch.json isi

{ "version": "0.2.0", "configurations": [ { "name": "Debug Local File", "type":"Ruby", "request": "launch", "cwd": "${workspaceRoot}", "program": "{workspaceRoot}/../script_name.rb", "args": [], "showDebuggerOutput": true } ] }

  1. Ikuti instruksi dari penulis ekstensi untuk instalasi permata manual. Itu berada di sini sekarang: https://github.com/rubyide/vscode-ruby#install-ruby-dependencies
  2. Anda mungkin ingin kemampuan menempatkan breakpoint di mana pun Anda suka; tidak mengaktifkan opsi ini dapat menyebabkan kebingungan. Untuk melakukan ini, kita akan pergi ke bilah menu atas dan pilih File->Preferences->Settings(atau Ctrl,) dan gulir sampai Anda mencapai Debugbagian. Luaskan dan cari bidang yang disebut "debug.allowBreakpointsEverywhere"- pilih bidang itu dan klik ikon yang tampak seperti pensil dan atur true.

Setelah melakukan semua hal yang menyenangkan, Anda harus dapat mengatur breakpoint dan debug dalam menu yang mirip dengan ini untuk pertengahan 2017 dan tema yang lebih gelap: masukkan deskripsi gambar di sinidengan semua hal menyenangkan seperti tumpukan panggilan, penampil variabel, dll.

PITA terbesar adalah 1) menginstal pre-reqs dan 2) Mengingat untuk mengkonfigurasi .vscode\launch.jsonfile. Hanya # 2 yang dapat menambahkan bagasi apa pun ke proyek-proyek masa depan, dan Anda hanya dapat menyalin konfigurasi yang cukup umum seperti yang tercantum di atas. Mungkin ada lokasi konfigurasi yang lebih umum, tetapi saya tidak tahu dari atas kepala saya.

kayleeFrye_onDeck
sumber
Sekarang tahun 2018, 😉 tetapi sayangnya, Anda masih tidak dapat men-debug uji unit menggunakan plugin yang Anda cantumkan di sini ... 😕 Cukup menyedihkan.
MonsieurDart
1
@ MonsieurDart Ketika saya menulis ini, itu dimaksudkan untuk debugging dasar dari ruby ​​scripts. Saya tidak akrab dengan apa pun secara khusus tentang unit test. Jika jawaban ini salah atau kedaluwarsa, beri tahu saya apa yang perlu perhatian dan info apa pun yang dapat membantu mempercepat proses itu.
kayleeFrye_onDeck
Hey @kayleeFrye_onDeck! Respons Anda luar biasa, saya benar-benar memberi Anda itu. Tapi, terakhir kali saya memeriksa plugin Ruby Peng Lv untuk VSC, itu tidak dapat mengatur breakpoints di dalam unit test (atau tes lainnya). Itu adalah salah satu keterbatasan plugin yang diketahui. Saya pikir orang perlu mengetahui hal ini sebelum mencoba mengkonfigurasi instance VSC mereka: butuh waktu dan, bagi banyak orang, menjalankan tes adalah cara nomor satu untuk menulis dan men-debug kode. 😊
MonsieurDart
6

Saya sangat merekomendasikan video ini, untuk memilih alat yang tepat saat ini untuk men-debug kode kami.

https://www.youtube.com/watch?v=GwgF8GcynV0

Secara pribadi, saya akan menyoroti dua topik besar dalam video ini.

  • Pry mengagumkan untuk debug data, "membongkar adalah penjelajah data" (sic)
  • Debugger tampaknya lebih baik untuk debug langkah demi langkah.

Itu dua sen ku!

David Silveira
sumber
6

Semua jawaban lain sudah memberikan hampir semuanya ... Hanya sedikit tambahan.

Jika Anda ingin lebih banyak debugger seperti IDE (non-CLI) dan tidak takut menggunakan Vim sebagai editor, saya sarankan plugin Vim Ruby Debugger untuk itu.

Dokumentasinya sangat mudah, jadi ikuti tautannya dan lihat. Singkatnya, ini memungkinkan Anda untuk mengatur breakpoint pada baris saat ini di editor, melihat variabel lokal di jendela bagus pada jeda, melangkahi / masuk - hampir semua fitur debugger biasa.

Bagi saya itu cukup menyenangkan untuk menggunakan debugger vim ini untuk debugging aplikasi Rails, meskipun kemampuan logger kaya Rails hampir menghilangkan kebutuhan untuk itu.

NIA
sumber
6

Saya baru saja menemukan permata ini (mengubah Pry menjadi debugger untuk MRI Ruby 2.0+)

https://github.com/deivid-rodriguez/pry-byebug

Instal dengan:

gem install pry-byebug

kemudian gunakan persis seperti pry, tandai baris yang ingin Anda hancurkan di:

require 'pry'; binding.pry

Namun tidak seperti vanilla pry, permata ini memiliki beberapa perintah navigasi seperti GDB seperti next, stepdan break:

break SomeClass#run            # Break at the start of `SomeClass#run`.
break Foo#bar if baz?          # Break at `Foo#bar` only if `baz?`.
break app/models/user.rb:15    # Break at line 15 in user.rb.
break 14                       # Break at line 14 in the current file.
nurettin
sumber
5
  1. Anda dapat mencetak variabel Anda di sepanjang jalan
  2. Aktifkan -wbendera (peringatan)
  3. Gunakan alat seperti ruby-debug
ghostdog74
sumber
2
Saya akan menambahkan itu irbadalah tempat awal yang bagus. Coba gunakan irb dengan potongan kecil yang dipertanyakan. Saya suka ruby-debug (ruby-debug19 untuk Ruby 1.9+) karena membuatnya mudah untuk menghentikan program yang sedang berjalan, memeriksa variabel, jatuh ke IRB, kemudian terus berjalan.
the Tin Man
5

Untuk dengan mudah men-debug skrip shell Ruby, cukup ubah baris pertama dari:

#!/usr/bin/env ruby

untuk:

#!/usr/bin/env ruby -rdebug

Kemudian setiap kali ketika konsol debugger ditampilkan, Anda dapat memilih:

  • cuntuk Lanjutkan (ke Pengecualian berikutnya, breakpoint atau baris dengan:) debugger,
  • n untuk baris berikutnya,
  • w/ whereuntuk menampilkan bingkai / panggilan stack,
  • l untuk Menampilkan kode saat ini,
  • cat untuk menunjukkan titik tangkapan.
  • h untuk bantuan lebih lanjut

Lihat juga: Debugging dengan ruby-debug , pintasan kunci untuk ruby-debug gem .


Jika skrip hang dan Anda perlu backtrace, coba gunakan lldb/ gdbsuka:

echo 'call (void)rb_backtrace()' | lldb -p $(pgrep -nf ruby)

dan kemudian periksa latar depan proses Anda.

Ganti lldbdengan gdbjika berfungsi lebih baik. Awalan dengan sudomen-debug proses yang tidak dimiliki.

kenorb
sumber
1
ruby-debug terlihat cantik tanggal. Git repo untuk ruby-debug hanya memiliki satu commit untuk tahun ini - apakah masih dipelihara secara aktif?
Andrew Grimm
Tampaknya juga dikemas dengan ruby, yang sangat bagus ketika Anda dalam keadaan darurat. Jawaban bagus!
Breedly
5

Pada Ruby 2.4.0, lebih mudah untuk memulai sesi IRB REPL di tengah setiap program Ruby. Masukkan baris-baris ini pada titik di program yang ingin Anda debug:

require 'irb'
binding.irb

Anda dapat menjalankan kode Ruby dan mencetak variabel lokal. Ketik Ctrl + D atau quituntuk mengakhiri REPL dan biarkan program Ruby tetap berjalan.

Anda juga dapat menggunakan putsdan pmencetak nilai-nilai dari program Anda saat program sedang berjalan.

David Grayson
sumber
4

Jika Anda menggunakan RubyMine , men -debug skrip ruby ​​sederhana dan mudah.

Misalkan Anda memiliki skrip Ruby hello_world.rb

1. Atur breakpoints

Tetapkan breakpoint pada baris 6 seperti di bawah ini.

masukkan deskripsi gambar di sini

2. Mulai debugging

Sekarang Anda bisa memulai debugger untuk menjalankan skrip:

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

3. Periksa variabel, dll.

Kemudian ketika eksekusi mencapai breakpoint, Anda akan dapat memeriksa variabel, dll.

masukkan deskripsi gambar di sini

Informasi lebih lanjut untuk referensi Anda

  1. Jika Anda ingin menggunakan RubyMine untuk melakukan debugging jarak jauh , Anda dapat melakukannya.
  2. Jika Anda ingin menggunakan RubyMine untuk men-debug rel jarak jauh yang berjalan di dalam buruh pelabuhan , itu juga mudah.
Yuci
sumber
Apakah kita memiliki cara untuk men-debug pustaka eksternal di RubyMine?
Am33d
2

printf debugging

Selalu ada kontroversi seputar teknik debugging, beberapa orang suka men-debug dengan pernyataan cetak, beberapa yang lain suka menggali lebih dalam dengan debugger.

Saya sarankan Anda mencoba kedua pendekatan.

Sebenarnya salah satu pria Unix lama baru-baru ini mengatakan, bahwa debugging printf adalah cara yang lebih cepat untuknya di beberapa titik.

Tetapi jika Anda baru dalam suatu pekerjaan dan perlu memahami segumpal besar kode, maka sangat berguna untuk melangkah di sana, meletakkan beberapa breakpoints di sana-sini, mengikuti cara kerjanya.

Seharusnya memberi Anda beberapa pemahaman tentang bagaimana kode ditenun.

Jika Anda baru mengenal beberapa perangkat lunak orang lain, ini mungkin membantu Anda melangkah ke sana.

Anda akan segera mengetahui apakah mereka mengaturnya dengan cara yang cerdas, atau jika itu hanya omong kosong.

edx
sumber
ini tanpa diragukan lagi jawaban terbaik ,,, tergantung
menriquez
1

Induk semua debugger adalah layar cetak lama biasa. Sebagian besar waktu, Anda mungkin hanya ingin memeriksa beberapa objek sederhana, cara cepat dan mudah adalah seperti ini:

@result = fetch_result

p "--------------------------"
p @result

Ini akan mencetak konten @result ke STDOUT dengan garis di depan untuk memudahkan identifikasi.

Bonus jika Anda menggunakan kerangka kerja kemampuan memuat / memuat ulang otomatis seperti Rails, Anda bahkan tidak perlu memulai ulang aplikasi Anda. (Kecuali jika kode yang Anda debug tidak dimuat ulang karena pengaturan kerangka spesifik)

Saya menemukan ini berfungsi untuk 90% dari use case untuk saya. Anda juga dapat menggunakan ruby-debug, tetapi saya merasa hal itu terlalu banyak menghabiskan waktu.

Aaron Qian
sumber
1

Ada banyak debugger dengan fitur berbeda, berdasarkan yang Anda pilih. Prioritas saya puas dengan pry-move yaitu:

  • info cepat dipahami tentang cara menggunakan
  • langkah intuitif (seperti langkah mudah ke blok)
  • "melangkah mundur" (pry-move sebagian memenuhi kebutuhan)
Daniel Garmoshka
sumber