|
|||
Forrige < |
Innhold ^
|
Neste >
|
-r debug
-opsjonen,
og sammen med hvilke som helst andre Ruby-opsjoner og navnet på ditt script:
ruby -r debug [ opsjoner ] [ programfil ] [ argumenter ] |
readline
-støtte på, kan du bruke markør-tastene
til å bevege deg fram og tilbake i kommando-historien og bruke linje-editerings-kommandoer
til å korrigere tidligere input.
For å gi deg en ide på hvordan Ruby-debuggeren er, så vises det en eksempelsesjon
her.
% |
irb [ irb-options ] [ ruby_script ] [ opsjoner ] |
% irb irb(main):001:0> |
Figur 12.1: Eksempel på sesjon i irb |
Meta-|
for å kjøre Ruby. Ruby-fortolkeren vil bruke det valge området som
standard input og output vil gå til et buffer kalt "*Shell Command Output*
"." Denne
egenskapen har vært nokså nyttig for oss når vi skrev denne boken---bare velg et par linjer
av Ruby midt i et avsnitt og prøv det ut!
Du kan gjøre noe av det samme i vi-editoren ved å bruke ":!Ruby
som erstatter programteksten med sin output, eller ``:w!ruby
'',
som viser outputen uten å påvirke bufferet. Andre editorer har lignende egenskaper.
Mens vi er på temaet, dette ville være et bra sted å nevne at det er en egen
Ruby-modus for Emacs som er inkludert i distribusjonen som misc/ruby-mode.el
.
Det er også en del syntaks-framhevende moduler for vim(en forbedret versjon av
vi-editoren), jed, og andre editorer tilgjengelige på nettet. Sjekk Ruby-FAQ'en for nåværende
lokasjoner og tilgjengelighet.
setter=
som en tildeling til en lokal variabel,
ikke som et metodekall. Bruk self.setter=
for å indikere metodekallet.
end
-nøkkelord.
Object#type
for å sjekke type
objekt.
{}
istedenfor for do
/end
.
$stdout
og$stderr
,
vil outputen ikke framstå i den rekkefølgen du forventet.
Bruk alltid ubuffret I/O(sett sync=true
) for debug-beskjeder.
String
, og vil ikke bli
automatisk konvertert til et tall av Ruby. Et kall til to_i
vil gjøre mirakler. Et vanlig feil Perl-programmerere gjør er:
while gets num1, num2 = split /,/ # ... end |
Hash#rehash
blir kalt hvis den gjør det).
trace_var
for å se når en variabel forandrer verdi.
Object#freeze
. Hvis du mistenker noen ukjent
del av koden for å sette en variabel med en jukse-verdi, prøv
å fryse variabelen. Feilen vil da bli fanget når den prøver å
modifisere variabelen.
x
og y
-variabler på hver iterasjon, men i den andre versjonen trenger den ikke det.
Vi bruker benchmark
-pakken fra Ruby Application Archive for å sammenligne løkkene:
require "benchmark" include Benchmark n = 1000000 bm(12) do |test| test.report("normal:") do n.times do |x| y = x + 1 end end test.report("predefine:") do x = y = 0 n.times do |x| y = x + 1 end end end |
user system total real normal: 2.490000 0.000000 2.490000 ( 2.462660) predefine: 2.190000 0.010000 2.200000 ( 2.196071) |
-r
profile
, eller fra inni kode ved å brukerequire
"profile"
. For eksempel:
require "profile" class Peter def initialize(amt) @value = amt end def rob(amt) @value -= amt amt end end class Paul def initialize @value = 0 end def pay(amt) @value += amt amt end end peter = Peter.new(1000) paul = Paul.new 1000.times do paul.pay(peter.rob(10)) end |
time seconds seconds calls ms/call ms/call name 33.33 0.29 0.29 1 290.00 870.00 Fixnum#times 28.74 0.54 0.25 1000 0.25 0.31 Paul#pay 26.44 0.77 0.23 1000 0.23 0.27 Peter#rob 6.90 0.83 0.06 1000 0.06 0.06 Fixnum#+ 4.60 0.87 0.04 1000 0.04 0.04 Fixnum#- 0.00 0.87 0.00 4 0.00 0.00 Module#method_added 0.00 0.87 0.00 2 0.00 0.00 Class#new 0.00 0.87 0.00 2 0.00 0.00 Class#inherited 0.00 0.87 0.00 1 0.00 0.00 Peter#initialize 0.00 0.87 0.00 1 0.00 0.00 Paul#initialize 0.00 0.87 0.00 1 0.00 870.00 #toplevel |
Debug-kommandoer
|
$Log: trouble.xml,v $ Revision 1.9 2002/08/31 22:38:02 kent Gjennomgang frem til profileren. Revision 1.8 2002/08/31 22:24:27 kent Gjenomgang frem til "Men det virker ikke". Revision 1.7 2002/08/26 17:07:03 kent Fikse tittel. Revision 1.6 2002/08/26 16:32:49 kent Fikset noen små problemer med TT-tagger.
Forrige < |
Innhold ^
|
Neste >
|