$30 off During Our Annual Pro Sale. View Details »

魅せるデバッグ技術

 魅せるデバッグ技術

iOSDC Reject Conference days2

Toshihiro Morimoto

August 31, 2016
Tweet

More Decks by Toshihiro Morimoto

Other Decks in Technology

Transcript

  1. 2016/08/31
    iOSDC Reject Conference days2
    @dealforest
    Toshihiro Morimoto
    ັͤΔσόοάٕज़

    View Slide

  2. ࣗݾ঺հ

    View Slide

  3. Works

    View Slide

  4. View Slide

  5. (ͭд⊂)ŠƄŢŠƄŢ

    View Slide

  6. View Slide

  7. ʢʀƅЧƅʣ …ʂʁ

    View Slide

  8. ొஃऀ͕ޙ൒Λ઎ΊΔͱ͍͏๫ڍw

    View Slide

  9. ັͤΔσόοάٕज़

    View Slide

  10. View Slide

  11. ͯ͞ɺօ͞Μ
    ͜͏͍͏৔߹Ͳ͏͠·͔͢ʁʁ

    View Slide

  12. View Slide

  13. View Slide

  14. ౰વ͜Εʹؾ͍ͮͨҙࣝͷߴ͍
    ͋ͳͨ͸σόοάΛ։࢝͠·͢

    View Slide

  15. ϩάΛ࢓ࠐΜͰ…

    View Slide

  16. ࠶ىಈʂ

    View Slide

  17. View Slide

  18. (ͭд⊂)ŠƄŢŠƄŢ

    View Slide

  19. View Slide

  20. ※ ຊਓͷڐՄ͸ಘ͍ͯ·͢

    View Slide

  21. Α͠ɺ࣍ʹ࠶ݱͨ͠Βௐ΂Α͏…

    View Slide

  22. ϓϦϯτσόοά͋Δ͋ΔͰ͢Ͷ

    View Slide

  23. ࢓ํͳ͍ͷͰ೴಺σόοά։࢝

    View Slide

  24. ݪҼީิ
    • େݩͷը૾͋Δʁ
    • ௨৴Τϥʔʁ
    • cache ͯͨ͠ը૾͕͓͔͍͠ʁ
    • SDWebImage, Kingfisher ͳͲͷ͍ͤʁ

    View Slide

  25. શવΘ͔Γ·ͤΜͶ

    View Slide

  26. ͦΜͳ࣌ͦ͜ LLDB ͷग़൪Ͱ͢

    View Slide

  27. LLDB ͳΒͦͷλΠϛϯάͰͷ
    ৘ใΛऔಘ͢Δ͜ͱ͕Ͱ͖·͢

    View Slide

  28. େݩͷը૾͋Δ?
    ϒϥ΢βͰ௚઀ͦͷ URL Λ։͍͍ͯͩ͘͞w

    View Slide

  29. ௨৴Τϥʔʁ
    ΤϥʔϋϯυϦϯάͯ͠ΔՕॴʹ Breakpoint Λઃఆ͢Δ
    ΤϥʔϋϯυϦϯά͍ͯ͠ͳ͍ͳΒɺϥΠϒϥϦͷதͰ
    ֘౰ՕॴΛؤுͬͯݟ͚͍ͭͯͩ͘͞ɻ
    (͔ͬͯɺ΍ͬͯͳ͍ਓͳΜ͍ͯͳ͍ͱࢥ͏͚Ͳ)

    View Slide

  30. cache ͯͨ͠ը૾͕͓͔͍͠ʁ
    (lldb) po let $URL = NSURL(string: “http://~”)
    (lldb) po let $request = NSURLRequest(URL: $URL)
    (lldb) po let $data = NSURLCache.sharedURLCache().
    cachedResponseForRequest(request)!.
    data
    (lldb) po let $path = “/Users/dealforest/cache.png”
    (lldb) po $data.writeToFile($path, atomically: true)

    View Slide

  31. SDWebImage, Kingfisher ͳͲͷ͍ͤʁ
    // Kingfisher ͷ৔߹
    (lldb) po let $URL = NSURL(string: “http://~”)
    (lldb) po let $resource = Resource(downloadURL: $URL)
    (lldb) po let $cache = KingfisherManager.sharedManager.cache
    // memory
    (lldb) po let $image =
    $cache.retrieveImageInMemoryCacheForKey($resource.cacheKey)
    // disk
    (lldb) po let $image =
    $cache.retrieveImageInDiskCacheForKey($resource.cacheKey)
    (lldb) po let $data = UIImagePNGRepresentation($image)!
    (lldb) po $data.writeToFile(, atomically: true)

    View Slide

  32. ͍͔͕Ͱ͔͢ʁʁ

    View Slide

  33. গ͠͸ঢ়گ͕೺ѲͰ͖ͨ͸ͣͰ͢

    View Slide

  34. Ұ౓͚ͩͳΒ·ͩ͠΋
    ͳΜͲ΋ಉ͜͡ͱ͢ΔͱͳΔͱ…

    View Slide

  35. ϥΠϒϥϦʹ͢Δͷ΋ͳ…

    View Slide

  36. ࢓ํͳ͍
    ͦ͏͍͏Ϋϥε࡞Δ͔

    View Slide

  37. ଞͷϓϩδΣΫτͰ΋࢖͍͍ͨͳ

    View Slide

  38. ίϐϖ

    View Slide

  39. ͦ͏͢Δͱ
    ϓϩμΫτͱؔ܎͕ͳ͍ίʔυ͕
    ૿͍͖͑ͯ·͢

    View Slide

  40. ͔͠΋ϓϩδΣΫτຖʹ
    มΘͬͯΓ͢Δͱ…

    View Slide

  41. Φϫλ ʘ(^o^)ʗ

    View Slide

  42. LLDB ͷ Plugin ʹ͢Ε͹͍͍Μͩʂ

    View Slide

  43. analyse_image
    // ΦϦδφϧը૾Λϒϥ΢βͰ։͖
    // ֤ cache ͷը૾Λग़ྗ͠ Preview Ͱදࣔ͢ΔίϚϯυ
    (lldb) analyse_image “http://~”
    [original] browser open
    [request] ok
    [cache] ok -> “/cache.png”
    [Kingfisher] memory ok -> “/kingfisher_memory.png”
    [Kingfisher] disk ok -> “/kingfisher_disk.png”

    View Slide

  44. Ͳ͏Ͱ͔͢ʁʁ
    ͜ΜͳͷϖΞϓϩͰ͞ΕͨΒ

    View Slide

  45. ͓͓͓͓͓͓͓ʂʂʂʂʂ
    Έ͍ͨʹͳͬͪΌ͍·ͤΜ͔ʁʁ

    View Slide

  46. ͳΓ·͢ΑͶʁʁ

    View Slide

  47. Ͷʁʁ

    View Slide


  48. View Slide

  49. LLDB ίϚϯυʹ͢ΔϝϦοτΛ
    ز͔ͭڍ͓͖͛ͯ·͢

    View Slide

  50. LLDB Plugin ʹ͢ΔϝϦοτ
    • σόοά࣌ʹ debug, release Ϗϧυ͕Ͳ͏͔͸ɹɹ
    ؔ܎ͳ͍ (#ifdef DEBUG ϚΫϩͷढ͍)
    • ϓϩδΣΫτ͕มΘͬͯ΋ಉ͡؀ڥͰσόοάͰ͖Δ
    • debug ༻ͷίʔυΛຒΊࠐΉඞཁ͕ͳ͍
    • debug ͷҝʹ private method Λݺͼग़͍ͯ͠ΔͷΛ
    ϦϦʔεϏϧυʹؚΉ৺഑͕ͳ͍

    View Slide

  51. ͜Μͳ Plugin ͭ͘Ε͹ศརͰ͢
    • ҰఆִؒͰදࣔ͞Ε͍ͯΔ view શͯʹରͯ͠
    exerciseAmbiguityInLayout Λ࣮ߦ͢ΔίϚϯυɹɹ
    (ambigurous layout ରࡦ)
    • ࣮ػͷϑΝΠϧΛ slack ʹૹ৴͢ΔίϚϯυɹɹɹɹ
    https://gist.github.com/dealforest/702a848ba0a7a64b139985f5cad885f0
    • ݱࡏͷ୺຤ͷঢ়گΛදࣔ͢ΔίϚϯυɹɹɹɹɹɹɹɹɹ
    free diskɺfree memory, ωοτϫʔΫ઀ଓઌ, ɹɹ
    OS όʔδϣϯͳͲ

    View Slide

  52. Ͳ͏Ͱ͢ʁʁ
    ΍ͬͯΈͨ͘ͳΓ·͔ͨ͠ʁʁ

    View Slide

  53. LLDB Plugin ͷ࡞Γํ͸
    ͜ͷޙϒϩάʹॻ͘ͷͰ
    গʑ͓଴͍ͪͩ͘͞

    View Slide

  54. ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠

    View Slide