programming erlang etc - andstudy/forge GitHub Wiki

뢀둝E λ‚˜λ¨Έμ§€ μœ μš©ν•œ 것듀

뢄석과 ν”„λ‘œνŒŒμΌλ§ 도ꡬ

  • Coverage
    • μ½”λ“œμ€‘μ— 많이 μˆ˜ν–‰λ˜λŠ” 쀄은? μ „ν˜€ μˆ˜ν–‰λ˜μ§€ μ•ŠλŠ” 쀄은?
  • Profiling
    • ν•¨μˆ˜κ°€ λͺ‡λ²ˆ ν˜ΈμΆœλ˜λŠ”κ°€? ν•¨μˆ˜κ°€ ν˜ΈμΆœλ˜λŠ” μ‹œκ°„μ€?
  • xref
    • undefined ν•¨μˆ˜ μ°ΎκΈ°

디버깅

  • 컴파일러 진단

    1. ν—€λ“œ 뢈일치
    2. μ–Έλ°”μš΄λ“œ λ³€μˆ˜
    3. μ’…λ£Œλ˜μ§€ μ•Šμ€ λ¬Έμžμ—΄
    4. λΆ„μ•ˆμ „ν•œ λ³€μˆ˜
    5. 그림자 λ³€μˆ˜
  • λŸ°νƒ€μž„ 진단

    1. μŠ€νƒ 좔적
  • 디버깅 기법

    1. io:format 디버깅
    2. 파일둜 λ€ν”„ν•˜κΈ°
    3. 였λ₯˜ 둜거 μ‚¬μš©ν•˜κΈ°
  • 디버거

    • μ½”λ“œλΆ„μ„μ—λ„ 유용

       c(lib_misc,[debug_info]).   % 디버그정보 ν¬ν•¨ν•΄μ„œ μ»΄νŒŒμΌν•˜κ³ 
      
       im().   % μ°½ λ„μš°κ³ 
      
       ii(lib_misc).   % lib_misc λͺ¨λ“ˆμ„ attach
      
       iaa([init]).   % μ΄ˆκΈ°ν™”
      
       lib_misc:.... μ‚¬μš©
      

좔적

  • trace 좜λ ₯
    • erlang:trace
    • erlang:trace_pattern

동적 μ½”λ“œ λ‘œλ”©

  • 컴파일 ν•˜λ©΄ μ•Œμ•„μ„œ μƒˆλ²„μ „μ„ μ‹€ν–‰.
    • a κ°€ λ£¨ν”„μ—μ„œ b λ₯Ό 호좜 -> b λ₯Ό λ³€κ²½ν•˜κ³  μƒˆλ‘œ 컴파일 -> λ‹€μŒλ²ˆ b ν˜ΈμΆœλΆ€ν„° μƒˆλ²„μ „μ˜ b μ‹€ν–‰

      -module(b).
      -export([x/0]).
      
      x() -> 1.
      
      -module(a).
      -compile(export_all).
          
       start(Tag) ->
          spawn(fun() -> loop(Tag) end).
      
      loop(Tag) ->
          sleep(),
          Val = b:x(),
          io:format("Vsn1 (~p) b:x() = ~p~n",[Tag, Val]),
          loop(Tag).
      
      sleep() ->
          receive
      	after 3000 -> true
          end.
      

μ‹€ν–‰

    a:start(one).
    a:start(two).
    Vsn1 (one) b:x() = 1
    Vsn1 (two) b:x() = 1
    Vsn1 (one) b:x() = 1
    Vsn1 (two) b:x() = 1
    
    b λ₯Ό λ³€κ²½ x() -> 2 ν•˜κ³  재컴파일
    
    c(b).
    Vsn1 (one) b:x() = 2
    Vsn1 (two) b:x() = 2