はじめに
さて、もうネタが尽きてしまいました。
今日は crystal tool
の中のあまり使ったことないツールを試してみます。
crystal tool unreachable
crystal tool
とすると、いろいろなツールが出てきます。その中でも、下の方に表示されているのが unreachableくんです。これは、利用していないメソッドを列挙することができます。
piyo.cr
def study_very_hard()
10000.times do
10000.times do
10000.times do
study_very_hard()
end
end
end
end
def neru()
sleep 7
end
puts "明日から頑張る"
neru()
こんなコードがあったとしたら、
crystal tool unreachable piyo.cr
とすると、こーんな感じで
piyo.cr:1:1 top-level study_very_hard 9 lines
呼ばれてないメソッドがあることを教えてくれます。
neru()
(:3[▓▓]
(¦3[▓▓]
=͟͟͞͞ (¦3[▓▓]
ちなみに、この study_very_hard()
を実行すると、stack overflow で死亡します。
Stack overflow (e.g., infinite or very deep recursion)
[0x56220b058706] *Exception::CallStack::print_backtrace:Nil +118 in ./piyo
[0x56220b047d76] ~procProc(Int32, Pointer(LibC::SiginfoT), Pointer(Void), Nil) +310 in ./piyo
[0x7ffb6ce42910] ?? +140717840410896 in /lib/x86_64-linux-gnu/libc.so.6
[0x56220b048100] *study_very_hard:Nil +80 in ./piyo
[0x56220b048105] *study_very_hard:Nil +85 in ./piyo (261831 times)
[0x56220b037a75] __crystal_main +1093 in ./piyo
[0x56220b0d0b36] *Crystal::main_user_code<Int32, Pointer(Pointer(UInt8))>:Nil +6 in ./piyo
[0x56220b0d0aaa] *Crystal::main<Int32, Pointer(Pointer(UInt8))>:Int32 +58 in ./piyo
[0x56220b044fd6] main +6 in ./piyo
[0x7ffb6ce280d0] ?? +140717840302288 in /lib/x86_64-linux-gnu/libc.so.6
[0x7ffb6ce28189] __libc_start_main +137 in /lib/x86_64-linux-gnu/libc.so.6
[0x56220b037565] _start +37 in ./piyo
[0x0] ???
バックトレースを見ると、呼び出しがたくさん並んでいます。
gdb ./piyo
やったね。質問サイトじゃない方のStackOverflowだ(´ω`)(謎テンション)
おわり