Ruby komut dosyalarında hata ayıklama [kapalı]


153

Aşağıdaki Ruby kodunu internetten kopyaladım ve birkaç değişiklik yaptım ama işe yaramıyor.

Programın kendi hatalarını ayıklamak için ne yapabilirim?


1
Yeniden açmak için oylama. OP, GDB benzeri adım hata ayıklamasını açıkça istiyor.
Ciro Santilli 法轮功 冠状 病 六四 事件 法轮功

Yanıtlar:


145

Pry ( GitHub ) kullanın .

Yükleme yöntemi:

$ gem install pry
$ pry

Sonra Ekle:

require 'pry'; binding.pry

programınıza ekleyin.

İtibariyle pry0.12.2, ancak navigasyon gibi komutlar da mevcuttur next, break, bazı diğer taşlar ek bu sağlar, vb bakınız örneğin pry-byedebug.


10
Ayrıca Pry (kesinlikle bir yaşam değiştirici!) Kullanmanızı öneririm .. Programınıza kurulduktan ve gerekli olduğunda, bir kesme noktası ayarlamak yazmak kadar kolaydır binding.pry. Ayrıca renk tamamlama, belge arama ve bir yöntemi dinamik olarak düzenleme ve yeniden yükleme imkanı ile birlikte gelir ..
Andrea Fiore

5
Pry'nin ana sayfasına buradan ulaşabilirsiniz: pryrepl.org .
shadowbq

4
Pry/ byebugmükemmeldir, ancak hata ayıklamada ilk adımınız değildir. Çoğu durumda, bir istisna oluşturmak raise object.inspectsorununuzu bir irb oturumu açmaktan daha hızlı çözer. Konsol hata ayıklayıcılarını yalnızca bir istisna yükseltme gibi basit çözümlerin sorununuzu çözemediğinde kullanmanızı öneririz.
Kelsey Hannan

3
Tek adımlı kod ile bir yolu var mı pry? Bunu nasıl yapacağımı bulamadım; ve bir hata ayıklayıcıdan beklediğim budur.
jpetazzo

2
@jpetazzo evet, 'next' yazarak
marcbest

114
  1. Ruby'de:

    ruby -rdebug myscript.rb 

    sonra,

    • b <line>: kırılma noktası koymak
    • ve n(ext)veya s(tep)vec(ontinue)
    • p(uts) sergilemek için

    (perl hata ayıklama gibi)

  2. Raylarda: Sunucuyu şununla başlat:

    script/server --debugger

    ve debuggerkodu ekleyin .


7
-rdebug çöp. Ve bakımsız. Pry komutunu kullanın (diğer cevaba bakınız).
Mart'ta kar yağışı

3
@SnowCrash - Neden -r debugsaçma olduğunu söylüyorsun ?
sid smith

8
-rdebug ile: hata ayıklamak için kaynak dosyayı değiştirmeye gerek yok
germanlinux

2
Yeni bir Ruby / Rails uygulaması için, Pry doğru cevaptır. Ama facetsgem gereksinimlerinin belirli bir sürümü ile bir Rails 2.2 uygulaması üzerinde çalıştırmak için Pry eski bir sürümünü bulmaya çalışırken bir saatten fazla harcadı ve başarısız oldu. Eski Raylar uygulamaları ruby-debugiçin biraz kötü ama işi hallediyor.
Abe Voelker

56

Korkuluğun önerdiği gibi: gözetleme kullanın! Sadece buna katılıyorum.

pry, irb'den çok daha iyi bir cevaptır.

Eklemelisin

require 'pry'

ekleyin ve ardından kaynak kodunuza bir kesme noktası ekleyin.

binding.pry

şeylere bakmak istediğiniz yerde (bu klasik bir IDE ortamında bir kırılma noktasını tetiklemek gibidir)

Programınız bir kez

binding.pry

satırında, programınızın tüm bağlamı elinizin altında olacak şekilde gözetleme replanına atılırsınız, böylece etrafınızdaki her şeyi keşfedebilir, tüm nesneleri araştırabilir, durumu değiştirebilir ve hatta kodu anında değiştirebilirsiniz.

Şu anda bulunduğunuz yöntemin kodunu değiştiremeyeceğinize inanıyorum, bu yüzden ne yazık ki yürütülecek bir sonraki satırı değiştiremezsiniz. Ama iyi yakut kodu zaten tek satır olma eğilimindedir ;-)


30

İstisnalar yükselterek ayıklama olduğunu çok daha kolay aracılığıyla şaşı dahaprintgünlük ifadeleri ve en hatalar için, onun genellikle çok daha hızlı gibi bir irb ayıklayıcısını açılması dahapryyabyebug. Bu araçlar her zaman ilk adımınız olmamalıdır.


Ruby / Raylarda Hızla Hata Ayıklama:

1. Hızlı Yöntem: Bir Exceptionzaman yükseltmek ve .inspectsonucu

En hızlı debug yolu Yakut (özellikle Raylar) kodu etmektir raiseçağıran ederken kod yürütme yolu boyunca bir istisna .inspectyöntemine veya nesne (örneğin üzerine foo):

raise foo.inspect

Yukarıdaki kodda, raisebir tetikler Exceptiono senin kod durur yürütülmesini ve elverişli içerdiğini bir hata mesajı döndürür .inspectnesne / yöntemi (yani hakkında bilgi foodebug çalıştığınızı satırda).

Bu teknik, bir nesneyi veya yöntemi hızlı bir şekilde incelemek ( örneğin öyle nilmi? ) Ve belirli bir bağlamda bir kod satırının yürütülüp yürütülmediğini hemen doğrulamak için kullanışlıdır .

2. Yedek: veya gibi bir yakut IRB hata ayıklayıcı kullanınbyebugpry

Eğer kodları icra akışının durumu hakkında bilgi sahibi Sadece sonra bir yakut mücevher irb gibi ayıklayıcıya taşınıyor düşünmelisiniz pryveya byebugnerede size yürütme yolunun içindeki nesnelerin durumuna daha derinlemesine araştırmaya olabilir.


Genel Başlangıç ​​Tavsiyesi

Bir sorunu ayıklamaya çalışırken, her zaman iyi bir tavsiye verilir :! @ # $ İng Hata Mesajını (RTFM) okuyun

Bu , size ne anlatmaya çalıştığını anlamanız için harekete geçmeden önce hata mesajlarını dikkatlice ve tamamen okumak anlamına gelir . Hata ayıkladığınızda, bir hata mesajını okurken aşağıdaki zihinsel soruları bu sırayla sorun :

  1. Hata hangi sınıfa başvuruyor? (yani doğru nesne sınıfım var mı yoksa neslim nilmi? )
  2. Hata hangi yönteme başvuruyor? (yani yöntemde bir türdür; bu yöntemi bu nesne türü / sınıfında çağırabilir miyim? )
  3. Son olarak, son iki sorumdan çıkarımlarımı kullanarak hangi kod satırlarını araştırmalıyım? (unutmayın: yığın izlemedeki son kod satırı, sorunun bulunduğu yerde değildir.)

Yığın izlemesinde, projenizden gelen kod satırlarına özellikle dikkat edin (örneğin app/..., Rails kullanıyorsanız başlayan satırlar ). Sorunun% 99'u kendi kodunuzdadır.


Bu sırayla yorumlamanın neden önemli olduğunu göstermek için ...

Örneğin, birçok yeni başlayanın kafasını karıştıran bir Ruby hata mesajı:

Bir noktada şu şekilde çalışan kod çalıştırırsınız:

@foo = Foo.new

...

@foo.bar

ve şöyle bir hata mesajı alırsınız:

undefined method "bar" for Nil:nilClass

Yeni başlayanlar bu hatayı görüp sorun yöntemi olduğunu düşünüyorum baredilir tanımsız . Değil. Bu hatada önemli olan kısım:

for Nil:nilClass

for Nil:nilClass@fooNil demek ! @foobir Fooörnek değişkeni değildir ! Bir nesneniz var Nil. Bu hatayı gördüğünüzde, yöntemin barsınıftaki nesneler için var olmadığını söylemeye çalışmak yakuttur Nil. (iyi duh! çünkü sınıftaki bir nesne için bir yöntem kullanmaya Fooçalışmıyoruz Nil).

Ne yazık ki, bu hatanın nasıl yazıldığından ( undefined method "bar" for Nil:nilClass) bu hatanın barvarlıkla ilgili olduğunu düşünmek için kandırılması kolaydır undefined. Dikkatle okunmadığında bu hata, yeni başlayanların yanlışlıkla baryöntemin ayrıntılarını kazmaya gitmesine neden olur Foove hatanın nesnenin yanlış sınıfta olduğunu ima eden kısmını tamamen kaçırır (bu durumda: nil). Hata mesajlarının tamamını okuyarak kolayca önlenebilen bir hatadır.

Özet:

Herhangi bir hata ayıklama işlemine başlamadan önce hata mesajının tamamını daima dikkatlice okuyun . Bunun anlamı: Her zaman kontrol sınıf bir hata mesajı bir nesne türünü ilk o zaman, onun yöntemlerini , önce sen hata meydana olabilir düşünüyorum nerede herhangi stacktrace veya kod satırına sleuthing başlar. Bu 5 saniye sizi 5 saat hayal kırıklığına uğratabilir.

tl; dr: Yazdırma günlüklerine göz kırpmayın: istisnalar yükseltin veya bunun yerine bir irb hata ayıklayıcısı kullanın. Hata ayıklamadan önce hataları dikkatlice okuyarak tavşan deliklerinden kaçının.


3
Baskı günlüklerini okumanın sıkıcı olduğunu kabul etsem de, ilk etapta hata ayıklayıcı kullanılmamasını tavsiye etmek çok kötü bir tavsiye. Bir kesme noktası eklemek ve bunu tetiklemek, bir istisna oluşturmakla aynı çabadır, ancak uygulamanın geçerli durumunu tam olarak görüntülemenizi sağlar. Şüpheli durumu incelemenin bir sonucu olarak başka sorular gelirse, başka bir istisna eklemek ve uygulamayı yeniden başlatmak yerine etkileşimli olarak ayrıntıya inebilirsiniz.
Patrick R.

2
@PatrickR. Deneyimlerime göre, IRB hata ayıklayıcıları hala kodunuzdaki bir sorunun tam olarak nerede olduğunu araştırmaya çalıştığınızda iyi bir ilk adım değildir . Birçok IRB kesme noktası eklemek ve kaldırmak, istisnalar eklemekten daha uzun sürer ve istisnaların yeni başlayanlarla kötü varsayımları ayıklamak için istisnaların yapabileceği şekilde kodunuzun kontrol akışı hakkında kesin yanıtlar vermeyin. IRB kesme noktalarının da unutulması kolaydır ve istekler asıldığında karışıklığa neden olur. Bir sorunun tam olarak nerede olduğunu biliyorsanız ve durumunun hatalarını ayıklamanız gerekiyorsa, bir IRB hata ayıklayıcı ile başlayın. Ancak çoğu zaman bu doğru değildir.
Kelsey Hannan

1
Hah! Hata mesajlarını okumak Ruby, ancak diğer kodlama dilleri için faydalı mıdır? Ben rahatsız bile değil OP OP suçlayamam.
kayleeFrye_onDeck

1
İlk tepkim @PatrickR'ye benziyordu, ama yine de denedim. Sonunda, bunu kötü tavsiye olarak görüyorum, ya da belki de en iyi şekilde, benim kullandığımdan farklı bir kullanım durumuna göre uyarlanmış tavsiyeler. Özellikle (a) Rails kullanmayan ve (b) yanlış sonuç veren ancak hata ya da istisna bulunmayan bir durum, yani kod bir sayı hesaplarsa, bu sadece yanlış sayıdır. Yinelenen bir şekilde çökme yürütecek bir programın nerede yapılacağını tahmin etmeye çalışmak bir stratejidir, ancak yeniden başlatmaya ve yeniden çalıştırmaya devam etmem gerektiğinden daha fazla iştir. Her döngünün boşa harcanan kendi başlatma süresi vardır.
Tuğla

20
  1. Değişkenleri mümkün olduğunca yazdırın. (Buna printf hata ayıklama denir) Bunu çalıştırarak yapabilirsiniz

    STDERR.puts x.inspect

    veya

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

    Bunu yazmayı daha kolay hale getirmek istiyorsanız, örnek mücevher kullanmak isteyebilirsiniz .

  2. Uyarıları açın. Çalışıyorsanız ruby, -wanahtarla çalıştırın (örn. ruby -w script.rb). İrb'den çalıştırıyorsanız ve 1.9.2'den önce bir ruby ​​sürümü kullanıyorsanız $VERBOSE = true, oturumunuzun başına yazın. Bir örnek değişkenini yanlış yazarsanız, uyarılar açıldığında

    uyarı: örnek değişkeni @valeusbaşlatılmadı

  3. İkili bir pirzola kavramını anlayın (aşağıdaki alıntı Çevik Geliştirici Uygulamalarından alınmıştır )

    Sorunlu alanı ikiye bölün ve hangi yarının sorunu içerdiğine bakın. Sonra tekrar yarıya bölün ve tekrarlayın.

  4. İkili bir doğramada başarılıysanız, yapmasını beklediğiniz şeyi yapmayan tek bir satır olduğunu görebilirsiniz. Örneğin

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

    falsedöneceğini düşünmenize rağmen, bir değer verir true. Bu durumda, belgelere bakmak isteyebilirsiniz. Dokümantasyon için web siteleri arasında ruby-doc.org veya APIdock bulunur . İkinci durumda, include?sağ üst köşeye yakın olan büyüteç simgesinin yanına yazacak include?, Arrayaltında hangisinin olduğunu seçeceksiniz (sınıfın ne olduğunu bilmiyorsanız [1, 2, 3], [1, 2, 3].classirb yazın) ve eklemeniz gerekir mi? (Array) .

    Ancak, dokümantasyon yardımcı olmazsa, belirli bir satırın neden tüm komut dosyasının ne yapmadığını değil, ne yapması gerektiği konusunda bir soru sorabiliyorsanız iyi bir yanıt alma olasılığınız daha yüksektir. olması gerekiyor.


7

her şeyi siler

2017'ye hoş geldiniz ^ _ ^

Tamam, yeni bir IDE denemeye karşı değilseniz, aşağıdakileri ücretsiz olarak yapabilirsiniz .

Hızlı Talimatlar

  1. Vscode'u yükle
  2. Henüz yapmadıysanız Ruby Dev Kit'i yükleyin
  3. Vscode için Ruby, ruby-linter ve ruby-rubocop uzantılarını yükleyin
  4. El ile her türlü taşlar yüklemek / vscode-yakut belirliyorsa rubyide gerekirse,
  5. Senin yapılandırın launch.jsonkullanmak "cwd"ve ve "program" alanlar kullanılarak {workspaceRoot}makro
  6. Adlı bir alan ekleyin "showDebuggerOutput"vetrue
  7. Hata ayıklama tercihlerinizin her yerinde kesme noktalarını etkinleştirin "debug.allowBreakpointsEverywhere": true

Detaylı talimatlar

  1. Visual Studio Code aka olarak indirin vscode; bu Visual Studio ile aynı değildir . Ücretsiz, hafif ve genellikle olumlu sayılır.
  2. Ruby Dev Kit'i kurun; buradaki repodaki talimatları izlemelisiniz: https://github.com/oneclick/rubyinstaller/wiki/Development-Kit
  3. Ardından, uzantıları bir web tarayıcısı aracılığıyla veya IDE'nin içine yükleyebilirsiniz; bu IDE içinde. Diğerini seçerseniz, buraya gidebilirsiniz . Vscode'un Uzantılar bölümüne gidin; bunu birkaç yolla yapabilirsiniz, ancak geleceğe en uygun yöntem muhtemelen vurur F1ve Uzantılar: Yükleme Uzantılarıext adlı bir seçenek kullanılabilir hale gelene kadar yazmaya başlar. Alternatifler ve üst menü çubuğundan,CtrlShiftxView->Extensions
  4. Sonra aşağıdaki uzantıları isteyeceksiniz; bunlar% 100 gerekli değildir, ancak bazılarını değiştirdikten sonra ne tutacağınıza karar vermenize izin vereceğim:
    • Yakut; uzatma yazarı Peng Lv
    • yakut-rubocop; uzatma yazarı misogi
    • yakut-Linter; uzatma yazarı Cody Hoover
  5. Ruby komut dizininizin içinde, şu komut satırı aracılığıyla bir dizin oluşturacağız .vscodeve orada launch.jsonbazı yapılandırma seçeneklerini saklayacağımız yerde bir dosya yapacağız.
    • launch.json içindekiler

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

  1. Manuel mücevher kurulumları için uzantı yazarlarının talimatlarını izleyin. Şimdilik burada: https://github.com/rubyide/vscode-ruby#install-ruby-dependencies
  2. Muhtemelen kesme noktalarını istediğiniz yere koyabileceksiniz; bu seçeneğin etkinleştirilmemesi karışıklığa neden olabilir. Bunu yapmak için, üst menü çubuğuna gidip File->Preferences->Settings(veya Ctrl,) öğesini seçip Debugbölüme ulaşıncaya kadar kaydırırız . Genişletin ve adlı alanı arayın "debug.allowBreakpointsEverywhere"- o alanı seçin ve küçük kalem görünümlü simgeyi tıklayın ve olarak ayarlayın true.

Tüm bu eğlenceli şeyleri yaptıktan sonra, 2017 ortasında ve daha koyu bir tema için buna benzer bir menüde kesme noktaları ve hata ayıklama ayarlayabilmeniz gerekir: resim açıklamasını buraya girinçağrı yığını, değişken görüntüleyici vb.

En büyük PITA 1) ön koşulları yüklemek ve 2) .vscode\launch.jsonDosya yapılandırmayı hatırlamak . Sadece # 2 gelecekteki projelere herhangi bir bagaj eklemelidir ve sadece yukarıda listelenen gibi yeterince genel bir konfigürasyonu kopyalayabilirsiniz. Muhtemelen daha genel bir yapılandırma konumu var, ama başımın üstünü bilmiyorum.


Şimdi 2018, 😉 ama ne yazık ki, burada listelenen eklentileri kullanarak bir birim testinde hata ayıklama yapamıyorsunuz… 😕 Çok üzücü.
MonsieurDart

1
@MonsieurDart Bunu yazdığımda, ruby ​​betiklerinde temel hata ayıklama amaçlıydı. Özellikle birim testler hakkında hiçbir şey bilmiyorum. Bu cevap yanlış veya güncel değilse, neyin dikkat edilmesi gerektiğini ve bu işlemin hızlanmasına yardımcı olabilecek bilgileri bildirin.
kayleeFrye_onDeck

Hey @kayleeFrye_onDeck! Cevabınız harika, tamamen size veriyorum. Ancak, son kez Peng Lv'in Ruby eklentisini VSC için kontrol ettiğimde, bir birim test (veya başka bir test) içinde kesme noktaları ayarlayamadı. Eklentinin bilinen sınırlamalarından biriydi. İnsanların VSC örneklerini yapılandırmaya çalışmadan önce bunu bilmeleri gerektiğini düşünüyorum: zaman alıyor ve birçok insan için bir test yapmak, kod yazmanın ve hata ayıklamanın bir numaralı yoludur. 😊
MonsieurDart

6

Şu anda kodumuzda hata ayıklamak için uygun aracı seçmek için bu videoyu şiddetle tavsiye ediyorum.

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

Şahsen, bu videodaki iki büyük konuyu vurgulamak isterim.

  • Pry hata ayıklama verileri için harika, "pry bir veri gezgini" (sic)
  • Hata ayıklayıcı adım adım hata ayıklamak için daha iyi gibi görünüyor.

Bu benim iki sentim!


6

Diğer tüm cevaplar zaten neredeyse her şeyi veriyor ... Sadece küçük bir ekleme.

Daha fazla IDE benzeri hata ayıklayıcı (CLI olmayan) istiyorsanız ve Vim'i editör olarak kullanmaktan korkmuyorsanız, bunun için Vim Ruby Hata Ayıklayıcı eklentisini öneriyorum .

Belgeleri oldukça basittir, bu yüzden bağlantıyı takip edin ve bakın. Kısacası, düzenleyicide geçerli satırda kesme noktası ayarlamanıza, duraklamada şık pencerede yerel değişkenleri görüntülemenize, neredeyse tüm olağan hata ayıklayıcı özelliklerine geçmenize izin verir.

Benim için Rails uygulamasının hata ayıklaması için bu vim hata ayıklayıcıyı kullanmak oldukça zevkliydi, ancak Rails'in zengin logger yetenekleri neredeyse bu ihtiyacı ortadan kaldırıyor.


6

Ben sadece bu gem keşfetti (MRI Ruby 2.0+ için bir hata ayıklayıcı Pry döner)

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

Yükleme yeri:

gem install pry-byebug

sonra tam olarak gibi kullanın pry, kırmak istediğiniz satırı işaretleyin:

require 'pry'; binding.pry

Aksine vanilya gözetlemek ancak bu mücevher gibi bazı kilit navigasyon GDB benzeri komutlar vardır next, stepve 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.

5
  1. Değişkenlerinizi yol boyunca yazdırabilirsiniz
  2. -w(Uyarılar) bayrağını açma
  3. Ruby-debug gibi bir araç kullanın

2
Bu irbharika bir başlangıç ​​noktası ekleyeceğim . Küçük şüpheli parçalar ile irb kullanmayı deneyin. Ruby-debug'i (Ruby 1.9+ için ruby-debug19) seviyorum, çünkü çalışan programı durdurmayı, değişkenleri incelemeyi, irb'ye düşmeyi ve sonra çalışmaya devam etmeyi kolaylaştırır.
Kalay Adam

5

Ruby kabuk komut dosyasında kolayca hata ayıklamak için ilk satırını şuradan değiştirin:

#!/usr/bin/env ruby

için:

#!/usr/bin/env ruby -rdebug

Daha sonra hata ayıklayıcı konsolu her gösterildiğinde aşağıdakileri seçebilirsiniz:

  • cDevam için (bir sonraki İstisna, kesme noktası veya şununla:) debugger,
  • n Sonraki satır için,
  • w/ whereÇerçeve / çağrı yığınını görüntüleme,
  • l Mevcut kodu göstermek için,
  • cat yakalamak için.
  • h daha fazla Yardım için.

Ayrıca bkz: Ruby-debug ile hata ayıklama , Ruby-debug gem için anahtar kısayolları .


Betiğin askıda kalması ve geri izlemeye ihtiyacınız olması durumunda lldb/ gdblike komutunu kullanmayı deneyin :

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

ve ardından işleminizin ön planını kontrol edin.

Değiştir lldbile gdbeğer işler iyi. Sahip olunmayan sudoişlemde hata ayıklamak için önek ekleyin .


1
yakut hata ayıklama oldukça tarihli görünüyor. Ruby-debug için git repo bu yıl için sadece bir taahhüt var - hala aktif olarak devam ediyor mu?
Andrew Grimm

Ayrıca yakut ile paketlenmiş gibi görünüyor, bu da bir çimdik olduğunuzda harika. Mükemmel cevap!
Breedly

5

Ruby 2.4.0'dan itibaren, herhangi bir Ruby programının ortasında bir IRB REPL oturumu başlatmak daha kolaydır. Bu satırları programda hata ayıklamak istediğiniz noktaya yerleştirin:

require 'irb'
binding.irb

Ruby kodunu çalıştırabilir ve yerel değişkenleri yazdırabilirsiniz. quitREPL'yi sonlandırmak ve Ruby programının çalışmaya devam etmesine izin vermek için Ctrl + D veya yazın.

Ayrıca kullanabilirsiniz putsve pçalıştığı gibi programınızın değerleri yazdırmak için.


4

RubyMine kullanıyorsanız , ruby ​​komut dosyalarında hata ayıklamak basit ve kolaydır.

Diyelim ki bir Ruby betiğiniz var hello_world.rb

1. Kesme noktalarını ayarlayın

6. satırda aşağıdaki gibi bir kesme noktası ayarlayın.

resim açıklamasını buraya girin

2. Hata ayıklamaya başlayın

Şimdi betiği çalıştırmak için hata ayıklayıcıyı başlatabilirsiniz:

resim açıklamasını buraya girin

resim açıklamasını buraya girin

3. Değişkenleri vb. İnceleyin.

Ardından yürütme bir kesme noktasına çarptığında, değişkenleri vb. Kontrol edebilirsiniz.

resim açıklamasını buraya girin

Referans için daha fazla bilgi

  1. Eğer isterseniz uzaktan hata ayıklama yapmak rubymine kullanmak , bunu yapabilirsiniz.
  2. Bir docker'ın içinde çalışan hata ayıklama raylarını uzaktan çalıştırmak için RubyMine kullanmak istiyorsanız, aynı zamanda basittir.

RubyMine'de harici kütüphanelerde hata ayıklamanın bir yolu var mı?
Am33d

2

printf hata ayıklama

Hata ayıklama teknikleri konusunda her zaman bir tartışma olmuştur, bazı insanlar basılı ifadelerle hata ayıklamayı, bazıları da hata ayıklayıcı ile derin kazmayı sever.

Her iki yaklaşımı da denemenizi öneririm.

Aslında yakın zamanda eski Unix adamlarından biri, printf hata ayıklamanın bazı noktalarda onun için daha hızlı bir yol olduğunu söyledi.

Ancak bir işte yeniyseniz ve büyük bir kod bloğunu anlamanız gerekiyorsa, oraya adım atmak, buraya ve orada bazı kesme noktaları koyarak, nasıl çalıştığını görmek gerçekten yararlıdır.

Kodun nasıl dokunduğunu anlamanız gerekir.

Diğer bazı halk yazılımlarında yeniyseniz, oraya adım atmanıza yardımcı olabilir.

Hızlı bir şekilde düzenleyip düzenlemediklerini veya sadece bir sürü bok olup olmadığını hızlıca öğreneceksiniz.


bu şüphesiz en iyi cevap ,,, bağlıdır
menriquez


1

Tüm hata ayıklayıcının annesi düz eski baskı ekranı. Çoğu zaman, muhtemelen sadece basit nesneleri incelemek istersiniz, hızlı ve kolay bir yol şöyledir:

@result = fetch_result

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

Bu, kolay tanımlamak için @result'un içeriğini STDOUT'a önden bir satırla yazdıracaktır.

Rails gibi otomatik yükleme / yeniden yükleme özellikli bir çerçeve kullanırsanız, uygulamanızı yeniden başlatmanız bile gerekmez. (Hata ayıkladığınız kod, çerçeveye özgü ayarlar nedeniyle yeniden yüklenmedikçe)

Bunun benim için kullanım durumunun% 90'ında işe yaradığını düşünüyorum. Ayrıca yakut hata ayıklama da kullanabilirsiniz, ancak çoğu zaman aşırı kilolu olduğunu düşünüyorum.


1

Seçim yaptığınıza göre farklı özelliklere sahip birçok hata ayıklayıcı var. Önceliklerim şut hareketlerinden memnun kaldı:

  • nasıl kullanılacağı hakkında hızlı anlaşılır bilgi
  • sezgisel adımlar (bloklara kolay adım atmak gibi)
  • "geri adım atma" (pry-hamle ihtiyacı kısmen karşılar)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.