Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ソフトウェア工学07 デバッグ

ソフトウェア工学07 デバッグ

デバッグ

テストとデバッグ,printfデバッグ,デバッガ,gdbコマンド,コンテナ内でのgdbデバッグ,静的解析,プロファイラ,GUIフロントエンドを用いたPythonデバッグ

99b434b001cd93fe73322f764d73372c?s=128

Toru Tamaki

August 05, 2021
Tweet

Transcript

  1. ιϑτ΢ΣΞ޻ֶ nσόοά • ςετͱσόοάɼprintfσόοάɼσόοΨɼgdbίϚϯυɼ ίϯςφ಺Ͱͷgdbσόοάɼ੩తղੳɼϓϩϑΝΠϥɼ GUIϑϩϯτΤϯυΛ༻͍ͨPythonσόοά ۄ໦పʢ໊޻େʣ

  2. σόοά

  3. ςετͱσόοά nσόοά • ίʔσΟϯάͯ͠΋ • ίϯύΠϧ͕௨Βͳ͍ • Syntax error •

    ࣮ߦͰ͖ͳ͍ • ࣮ߦ࣌Τϥʔ • Segmentation fault • Core dump • ظ଴ͨ͠ಈ͖Λ͠ͳ͍ • ίʔυΛσόοά͢Δ • ܦݧͱצΛཔΓʹ nςετ • ίʔσΟϯά͕ऴΘͬͯίʔυΛ ࣮ߦ͢Δ • ࣮ߦ݁Ռ͕࢓༷ͱҰக͍ͯ͠Δ͜ ͱΛ֬ೝ͢Δ • ҟͳΔ৔߹ʹ͸ίʔυΛमਖ਼͢ Δ • ͢΂ͯͷϞδϡʔϧΛςετ͢Δ • ໢ཏతʹߦ͏ • ܥ౷ཱͯͯߦ͏ • ্ҐϞδϡʔϧ͔ΒԼҐϞ δϡʔϧ·Ͱ͢΂ͯ
  4. ςετͱσόοά nσόοά • ίʔσΟϯάͯ͠΋ • ίϯύΠϧ͕௨Βͳ͍ • Syntax error •

    ࣮ߦͰ͖ͳ͍ • ࣮ߦ࣌Τϥʔ • Segmentation fault • Core dump • ظ଴ͨ͠ಈ͖Λ͠ͳ͍ • ίʔυΛσόοά͢Δ • ܦݧͱצΛཔΓʹ nςετ • ίʔσΟϯά͕ऴΘͬͯίʔυΛ ࣮ߦ͢Δ • ࣮ߦ݁Ռ͕࢓༷ͱҰக͍ͯ͠Δ͜ ͱΛ֬ೝ͢Δ • ҟͳΔ৔߹ʹ͸ίʔυΛमਖ਼͢ Δ • ͢΂ͯͷϞδϡʔϧΛςετ͢Δ • ໢ཏతʹߦ͏ • ܥ౷ཱͯͯߦ͏ • ্ҐϞδϡʔϧ͔ΒԼҐϞ δϡʔϧ·Ͱ͢΂ͯ Ϣ χ ο τ ς ε τ
  5. σόοά͸։ൃ࣌ͷ࡞ۀ nσόοάͷ໨త • ίϯύΠϧΛ௨͢͜ͱ • ࣮ߦͰ͖ΔΑ͏ʹ͢Δ͜ͱ • ϢχοτςετΛ௨͢͜ͱ nํ๏ •

    ܦݧͱצ • ։ൃऀͷεΩϧ nॏཁ • πʔϧΛ஌Δ͜ͱ • πʔϧΛޮ཰తʹ࢖͏͜ͱ
  6. ݪ࢝తͳํ๏ɿQSJOUจσόοά nίʔυதʹɼϝοηʔδΛදࣔ͢ΔprintจΛຒΊࠐΉ n࣮ߦ͞Εͨͱ͜Ζ·Ͱ͕දࣔ͞ΕΔͷͰ • ΤϥʔՕॴͷಛఆ͕͋Δఔ౓Ͱ͖Δ • ม਺ͷ஋Λදࣔͯ͠ڍಈΛ֬ೝͰ͖Δ

  7. QSJOUGσόοάͷྫ ͳΜ͔ ͓͔͍͠

  8. QSJOUGσόοάͷྫ ͔͜͜Β ͓͔͍͠ ݪҼɿΠϯσοΫεൣғͷؒҧ͍

  9. ݪ࢝తͳํ๏ɿQSJOUจσόοά nར఺ • ୯७ɼͲͷݴޠͰ΋Ͱ͖Δ nܽ఺ • ίʔυ͕Ԛછ͞ΕΔ • printจͩΒ͚ •

    ऴΘͬͯ΋printจΛ࡟আ͠๨ΕΔ • ଞͷ෦෼·Ͱ࡟আͯ͠͠·͏͜ͱ΋͋Δ • λʔϛφϧද͕ࣔΩϟογϡ͞ΕΔ͜ͱ͕͋Δʢදࣔ͞Εͳ͍ʣ • ௨ৗ͸վߦ͠ͳ͍ͱflush͞Εͳ͍ • GUIͳͲλʔϛφϧ͕ͳ͍৔߹ʹ͸ෆ޲͖ • ΦϒδΣΫτࢦ޲ͳͲεϨου͕ฒྻʹ૸Δͱಛఆ͸೉͍͠ • දࣔ͢Δ಺༰͕ଟ͗͢ΔͱϜϦʢߦྻ΍ը૾ͳͲʣ
  10. σόοΨ nσόοά༻ͷπʔϧ • debug, debugger • gdb͕༗໊ʢGNU debuggerʣ nσόοΨͷར఺ •

    ࣮ߦ͠ͳ͕Βɼݱࡏͷ࣮ߦߦ͕Θ ͔Δ • ม਺ͷ஋΋Θ͔Δ • ༷ʑͳπʔϧ͕͋Δ • CUIʢλʔϛφϧʣ൛ • ݩͷgdb͸͜Ε • GUI൛ɼΤσΟλ౷߹ • όοΫΤϯυʹ͸gdbΛ࢖͏ n֤छݴޠ༻ͷσόοΨ • gdb: C, C++, etc • pdb: Python • jdb: Java
  11. HECʹΑΔ$ݴޠσόοά dockerΛ࢖Θͳ͍৔߹ͷઆ໌Ͱ͢ gdbΛdocker-composeΛ࢖͏ํ๏͸࣍ʹઆ໌͠·͢

  12. ίϯύΠϧ࣌ʹσόοά༻γϯϘϧΛຒΊࠐΉ nίϯύΠϧ࣌ʹ-gΦϓγϣϯΛ͚ͭΔ ࣮ߦ݁Ռ͸௨ৗ௨Γ σόοά৘ใΛੜ੒

  13. HECͷىಈ gdbͷ ϓϩϯϓτ gdbͷΦϓγϣϯʹ ࣮ߦόΠφϦa.outΛࢦఆ

  14. TUBSU mainͷ࠷ॳͷ ࣮ߦߦ start: σόοάΛ։࢝ɽmainؔ਺ͰҰ୴ఀࢭ

  15. MʢখจࣈͷΤϧʣ l, list: ݱࡏͷఀࢭߦલޙͷίʔυΛදࣔʢlistʣ

  16. Q O p variable: ม਺ͷ஋Λදࣔʢprintʣ n: ࣍ͷ࣮ߦߦ΁Ҡಈʢnextʣ 13ߦ໨Λ͜Ε ͔Β࣮ߦ͢Δ ͔Β·ͩॳظ

    Խ͞Ε͍ͯͳ ͍ 13ߦ໨͕࣮ߦ ͞ΕͨͷͰॳ ظԽ͞Εͨ
  17. O D n: ࣍ͷ࣮ߦߦ΁Ҡಈʢnextʣ c: ࣮ߦΛ࠶։ʢcontinueʣ ؔ਺͸εΩο ϓͯ࣍͠ͷߦ ΁͢͢Ή ໰୊ͳ͘

    ࠷ޙ·Ͱ ࣮ߦ͕ऴྃ
  18. O T n: ࣍ͷ࣮ߦ΁Ҡಈʢnextʣ ؔ਺͕͋ͬͯ΋1ߦਐΉʢstep overʣ s: ࣍ͷ࣮ߦ΁Ҡಈʢstepʣ ؔ਺͕͋ͬͨΒؔ਺಺΁ਐΉʢstep inʣ

    ؔ਺ͷத΁ ਐΉ
  19. O T n: ࣍ͷ࣮ߦ΁Ҡಈʢnextʣ ؔ਺͕͋ͬͯ΋1ߦਐΉʢstep overʣ s: ࣍ͷ࣮ߦ΁Ҡಈʢstepʣ ؔ਺͕͋ͬͨΒؔ਺಺΁ਐΉʢstep inʣ

    ؔ਺͔Β ໭ͬͯ͘Δ
  20. XIFSF where: ؔ਺ݺͼग़͠ελοΫͷͲ͜ʹ͍Δͷ͔Λදࣔ ؔ਺ͷத΁ ਐΉ ݱࡏ͸ mainͷத ݱࡏ͸main͔Βݺͼग़͞Εͨ myfuncͷத

  21. CCSFBLQPJOU b: ϒϨʔΫϙΠϯτʢ࣮ߦΛதஅ͢ΔߦʣΛઃఆ ϒϨʔΫϙΠϯτ͕ ͳ͍ͱɼcontinueͰ ࠷ޙ·Ͱ࣮ߦ͞ΕΔ start

  22. CCSFBLQPJOU b: ϒϨʔΫϙΠϯτʢ࣮ߦΛதஅ͢ΔߦʣΛઃఆ ϒϨʔΫϙΠϯτ Λ20ߦ໨ʹઃఆ i b (info breakpoint) ઃఆ͞Ε͍ͯΔϒϨʔΫϙΠϯτΛ͢΂ͯදࣔ

    start ϒϨʔΫϙΠϯτ Ͱ࣮ߦ͕தஅ
  23. E d n: ϒϨʔΫϙΠϯτnΛ࡟আʢdeleteʣ 13൪໨ͷϒϨʔΫϙΠϯτΛ࡟আ

  24. XBUDIQPJOU ϒϨʔΫϙΠϯτɿ࣮ߦΛதஅ͢ΔߦΛઃఆ ΢ΥονϙΠϯτɿ஋͕มΘͬͨΒ࣮ߦΛதஅ͢Δม਺Λઃఆ ม਺bʹ΢Υο νϙΠϯτΛ ઃఆ ΢ΥονϙΠϯτʹ ͳ͍ͬͯΔ ࣮ߦΛ࠶ ։͢Δͱ

    18ߦ໨Ͱbͷ ஋͕มΘΔ ͷͰ 20ߦ໨ͷ࣮ ߦલͰఀࢭ ͢Δ 22ߦ໨ Ͱఀࢭ 20ߦ໨Ͱ΋ มΘΔͷͰ
  25. EJTQMBZ display variable: ఀࢭຖʹ஋Λදࣔ͢Δม਺Λઃఆ ม਺aΛදࣔ ͢Δઃఆ ม਺cΛදࣔ ͢Δઃఆ ม਺cΛදࣔ ͢Δઃఆ

    ఀࢭͨ͠ͷ Ͱa, b, cΛද ࣔ ఀࢭͨ͠ͷ Ͱa, b, cΛද ࣔ
  26. RVJU quit: gdbΛऴྃ

  27. ϑϩϯτΤϯυʢ(6*ʣ continue step over step in step out restart stop

    ݱࡏͷ࣮ߦߦ ϒϨʔΫϙΠϯτ ඪ४ग़ྗ ؔ਺ ݺͼग़͠ ελοΫ ม਺ ΢Υον ม਺ͷ ஋දࣔ ϑϩϯτΤϯυͷྫ ʢVS codeʣ ༷ʑͳGUIπʔϧ͕͋Δ͕ ૢ࡞಺༰͸΄΅ಉ͡
  28. None
  29. %PDLFSͰHECΛ࢖͏ dockerΛ࢖Θͳ͍ͱɼ؀ڥߏங͕݁ߏେม ίʔυ͸͔͜͜Βμ΢ϯϩʔυ

  30. ndocker-compose.yml services: mygcc: build: ./ volumes: - ./:/mnt tty: true

    cap_add: - SYS_PTRACE security_opt: - seccomp:unconfined EPDLFSDPNQPTFΛར༻͢Δ ndockerfile FROM gcc RUN apt -y update ¥ && apt -y install gdb cppcheck WORKDIR /mnt Πϝʔδʹ gdbΛΠϯετʔϧ dockerfileͷ ͋ΔσΟϨΫτϦ docker runͷ-vΦ ϓγϣϯͱಉ͡ docker runͷ-itΦ ϓγϣϯͱಉ͡ gdbΛ࢖͏ઃఆ ʢޙͰ࢖͏linterʣ
  31. EPDLFSDPNQPTFͰΠϝʔδΛϏϧυ dockerͷ πʔϧ docker-compose.ymlΛݩʹ docker-compose༻ͷΠϝʔδΛ࡞੒ ࡞੒͞ΕͨΠϝʔδ

  32. ิ଍ɿΠϝʔδͷCVJMEͰࣦഊ͢Δ৔߹ ndocker build΍docker-compose buildͰࣦഊ͢Δ৔߹ʹ͸ɼҎԼΛࢼ ͍ͯͩ͘͠͞ • dockerΛ࠶ىಈ͢Δ • ϩʔΧϧPCΛ࠶ىಈ͢Δ nࢀߟɿWSLͰapt

    install error “Release file is not valid yet. Updates for this repository will not be applied.”
  33. EPDLFSDPNQPTFͰΠϝʔδΛϏϧυ Πϝʔδ໊ʹ ϑΥϧμ໊_αʔϏε໊ docker-compose.yml Ͱࢦఆͨ͠αʔϏε໊ ஫ҙɿ docker-compose͸ ࣮ߦ͢ΔσΟϨΫτϦʹґଘ͢Δ

  34. EPDLFSDPNQPTFͰίϯςφΛىಈ ஫ҙɿ docker-compose͸ ࣮ߦ͢ΔσΟϨΫτϦʹґଘ͢Δ up: ίϯςφͷىಈ -d: όοΫάϥ΢ϯυͰىಈ όοΫάϥ΢ ϯυͰ࣮ߦத

    ىಈதͷ ίϯςφΛ දࣔ buildͤͣʹ ௚઀upͯ͠΋OK ʢbuild͕૸Δʣ
  35. ىಈதͷίϯςφͰίϯύΠϧ ஫ҙɿ docker-compose͸ ࣮ߦ͢ΔσΟϨΫτϦʹґଘ͢Δ ಉ͡σΟϨΫτϦʹ main.cΛ͓͘͜ͱ ىಈதͷίϯςφͰ ίϚϯυΛ࣮ߦ ࣮ߦ͢ΔίϯςφͷαʔϏε໊ ίϯςφͰ

    ࣮ߦ͢Δ ίϚϯυ
  36. ίϯύΠϧ࣌ʹσόοά༻γϯϘϧΛຒΊࠐΉ σόοά৘ใΛੜ੒ ࣮ߦ݁Ռ͸௨ৗ௨Γ

  37. HECͷىಈ gdbͷ ϓϩϯϓτ gdbͷΦϓγϣϯʹ ࣮ߦόΠφϦa.outΛࢦఆ ϗετ ίϯςφ

  38. RVJU quit: gdbΛऴྃ ϗετ ίϯςφ

  39. ิ଍ɿEPDLFSDPNQPTFΛఀࢭ͢Δʹ͸ ஫ҙɿ docker-compose͸ ࣮ߦ͢ΔσΟϨΫτϦʹґଘ͢Δ ίϯςφͷఀࢭ

  40. ิ଍ɿEPDLFSDPNQPTFΛఀࢭ͢Δʹ͸ ஫ҙɿ docker-compose͸ ࣮ߦ͢ΔσΟϨΫτϦʹґଘ͢Δ ίϯςφͷఀࢭ ͢΂ͯ࡟আ͢ΔͳΒ • ίϯςφ • Πϝʔδ

    • ϘϦϡʔϜ • ͦͷଞ
  41. 74DPEFͰίϯςφHEC

  42. 7JTVBM4UVEJP$PEF WTDPEF n౷߹։ൃ؀ڥ • ֤छ֦ுػೳ͋Γ • Dockerίϯςφ಺ Ͱͷ։ൃ΋Մೳ nͦͷଞͷΤσΟλ •

    vi / vim • Emacs • Eclips • Sublime Text https://azure.microsoft.com/ja-jp/products/visual-studio-code/
  43. ४උ

  44. ֦ுػೳͰ remote developmentΛݕࡧͯ͠ Πϯετʔϧ

  45. Remote Containers΋Πϯετʔϧ

  46. Docker΋Πϯετʔϧ

  47. ೔ຊޠԽ΋΄͍͠ΑͶ

  48. ίϯςφ΁઀ଓ

  49. ͜͜Λԡ͢ͱɽɽɽ ࣮ߦதͷίϯςφʹ઀ଓ͢Δ ϝχϡʔ͕දࣔ͞ΕΔͷͰɽɽɽ

  50. ઌʹdocker-composeͰίϯςφΛىಈ͠ ͓ͯ͘ ىಈதͷίϯςφ໊Λબ୒ͯ͠઀ଓ

  51. ৽͍͠΢Οϯυ΢͕։͍ͯ ىಈதͷίϯςφʹ઀ଓ ࣍ʹίϯςφ಺ͷϑΥϧμΛબ୒

  52. ࠓͷઃఆͰ͸/mntʹϗετΛϚ΢ϯτͯ͠ ͍ΔͷͰɼ͜ΕΛબ୒

  53. ϑΥϧμΛબ୒ͨ͠ΒOKΛԡ͢

  54. ϑΥϧμ಺ͷmain.cΛબͿͱͦͷϑΝΠϧ ͕දࣔ͞ΕΔ /mntϑΥϧμΛදࣔ

  55. σόοΨͷϑϩϯτ Τϯυ४උ

  56. ίϯςφ಺ʹ΋֦ுػೳΛ͍Ε͓ͯ͘ CݴޠσόοΨͷ ϑϩϯτΤϯυΛΠϯετʔϧ

  57. ίϯςφ಺ʹ΋֦ுػೳΛ͍Ε͓ͯ͘ ίϯςφ಺΋೔ຊޠԽ͓ͯ͘͠

  58. Ϗϧυ

  59. ίϚϯυύϨοτΛ։͍ͯ configure taskͱೖྗ ग़͖ͯͨ Tasks: Configure Task Λબ୒ ίϚϯυύϨοτͷ։͖ํ •

    win: Ctrl+Shift+p • macOS: Cmd+Shift+p • ϝχϡʔ à ίϚϯυύϨοτ ͜ͷϖʔδͷ಺༰͸ߦΘͳ͍Ͱ͍ͩ͘͞ ʢ͢ͰʹઃఆࡁΈͰ͢ɽࣗ෼Ͱ࠷ॳ͔Β࡞Δ৔ ߹ͷͨΊͷઆ໌Ͱ͢ʣ
  60. ͜͜Ͱ͸ී௨ͷgccΛબ୒ ʢͲͪΒͰ΋OKʣ ͜ͷϖʔδͷ಺༰͸ߦΘͳ͍Ͱ͍ͩ͘͞ ʢ͢ͰʹઃఆࡁΈͰ͢ɽࣗ෼Ͱ࠷ॳ͔Β࡞Δ৔ ߹ͷͨΊͷઆ໌Ͱ͢ʣ

  61. tasks.jsonͷςϯϓϨʔτ͕։͘ ʢ͜ͷ··อଘ͢Ε͹OKʣ ίϯύΠϥ -g͕ͭ ͍ͯΔ ͜ͷϖʔδͷ಺༰͸ߦΘͳ͍Ͱ͍ͩ͘͞ ʢ͢ͰʹઃఆࡁΈͰ͢ɽࣗ෼Ͱ࠷ॳ͔Β࡞Δ৔ ߹ͷͨΊͷઆ໌Ͱ͢ʣ

  62. ϏϧυʢίϯύΠϧʣ͢Δ

  63. ͜ΕΛબ୒ʢ͜Ε͕tasks.jsonͷϥϕϧʣ

  64. Ϗϧυ͞Εͨ ࣮ߦόΠφϦ

  65. σόοά

  66. σόοάΛ։࢝ ͜ͷϖʔδͷ಺༰͸ߦΘͳ͍Ͱ͍ͩ͘͞ ʢ͢ͰʹઃఆࡁΈͰ͢ɽࣗ෼Ͱ࠷ॳ͔Β࡞Δ৔ ߹ͷͨΊͷઆ໌Ͱ͢ʣ

  67. gdbΛબ୒ ͜ͷϖʔδͷ಺༰͸ߦΘͳ͍Ͱ͍ͩ͘͞ ʢ͢ͰʹઃఆࡁΈͰ͢ɽࣗ෼Ͱ࠷ॳ͔Β࡞Δ৔ ߹ͷͨΊͷઆ໌Ͱ͢ʣ

  68. ͜ΕΛબ୒ ͜ͷϖʔδͷ಺༰͸ߦΘͳ͍Ͱ͍ͩ͘͞ ʢ͢ͰʹઃఆࡁΈͰ͢ɽࣗ෼Ͱ࠷ॳ͔Β࡞Δ৔ ߹ͷͨΊͷઆ໌Ͱ͢ʣ

  69. launch.jsonͷςϯϓϨʔτ͕։͘ ʢ͜ͷ··อଘ͢Ε͹OKʣ ͜Ε͕σόοά͢ Δ࣮ߦόΠφϦ “main.c”Λσόοά͢ΔͳΒɼಉ͡ ϑΥϧμ಺ͷ֦ுࢠͳ͠ͷϑΝΠ ϧʢͭ·ΓmainʣΛ࢖͏ ͜ͷϖʔδͷ಺༰͸ߦΘͳ͍Ͱ͍ͩ͘͞ ʢ͢ͰʹઃఆࡁΈͰ͢ɽࣗ෼Ͱ࠷ॳ͔Β࡞Δ৔ ߹ͷͨΊͷઆ໌Ͱ͢ʣ

  70. σόοά͢ΔϑΝΠϧΛબͿ ߦ൪߸ͷࠨ෦෼Λԡͯ͠ ϒϨʔΫϙΠϯτΛઃఆ͓ͯ͘͠

  71. σόοά͕࢝·ͬͯ ϒϨʔΫϙΠϯτͰఀࢭத ͋ͱ͸গ࣮ͣͭ͠ߦ͍ͯ͘͠ ͜ΕΛԡͨ͠Βσόοά։࢝ continue step over step in step

    out ʢؔ਺Λ࠷ޙ·Ͱ࣮ߦ ͯ͠ൈ͚Δʣ ऴྃ
  72. ิ଍

  73. ίϯςφ಺ͷผͷϑΥϧμΛ։͘ʹ͸͜Ε ผϑΥϧμΛ։͘ͳΒ

  74. ։͘ϑΥϧμΛ࠶౓ࢦఆ͢Ε͹OK ผϑΥϧμΛ։͘ͳΒ

  75. ίϯςφͱͷ઀ଓΛ੾Δʹ͸ ͜͜Λԡͯ͠ɽɽɽ ऴྃΛબ୒͢Ε͹OK ઀ଓΛऴྃ͢ΔͳΒ

  76. ੩తղੳ lint, linter

  77. ੩తղੳͱ͸ nίϯύΠϧલ΍࣮ߦલʹΤϥʔΛݕग़͢Δπʔϧ • ʮlintʯʢࢳͣ͘ʣ • ͜·͔͍Τϥʔʢࢳͣ͘ʣΛআڈ͢Δ͜ͱ͔Β໋໊ • ͜ͷछͷπʔϧΛlint΍linterͱݺͿ n੩తղੳʢstatic analysisʣ

    • ʮίϯύΠϧ͕௨Βͳ͍ʯ໰୊ • ʢGUIͳΒʣίʔσΟϯά͍ͯ͠Δ࠷தʹจ๏ΤϥʔΛࢦఠ • ʮ࣮ߦͰ͖ͳ͍ʯ໰୊ • ίϯύΠϥΑΓ΋ݫີʹΤϥʔΛݕग़ • ม਺ͷൣғ֎ΠϯσοΫεͳͲ
  78. ྫ nӈͷίʔυͷ໰୊఺ • ΠϯσοΫεͷൣғ֎ࢦఆ • ίʔσΟϯάதʹ͸ؾ͕෇͔ͳ͍ɽɽɽ

  79. ྫ ngccʹΑΔίϯύΠϧ • ߏจΤϥʔͰ͸ͳ͍ͷͰίϯύΠϧ࣌ʹ͸ݕग़͞Εͳ͍ ncppcheckʹΑΔ੩తղੳ • C/C++ͷlinter • ൣғ֎ΠϯσοΫεࢦఆͳͲͷओͳΤϥʔ͕ݕग़͞ΕΔ

  80. ྫ nclangʹΑΔίϯύΠϧ • gccͱ͸ผͷίϯύΠϥ • ίϯύΠϥʹΑͬͯ͸੩తղੳΛߦ͏

  81. 74DPEFͰMJOU

  82. linter༻ͷ֦ுػೳΛΠϯετʔϧ ίϯςφ಺ʹ

  83. ίʔσΟϯάதʹlinter͕૸Δ ϑΝΠϧʹ໰ ୊͕͋Δͱͦ ͷ਺͕දࣔ ·ͣίϚϯυύϨοτͰ ࠷ॳʹlflyling toggle…”Ͱݕࡧͯ͠ Trust FlagΛΦϯʹ͢Δ ʢ͜ΕͰ࢖͑ΔΑ͏ʹͳΔʣ

  84. Ϛ΢εΦʔόʔͰ linterͷ݁ՌΛදࣔ

  85. ϓϩϑΝΠϥ

  86. ϓϩϑΝΠϦϯάͱ͸ n σόοά • ͏·͘ಈ͘Α͏ʹؤுΔ n ੩తղੳ • ΤϥʔΛݕग़͢Δ n

    ϓϩϑΝΠϦϯάʢੑೳղੳʣ • ύϑΥʔϚϯεͷϘτϧωοΫΛ୳͢ • ίʔυͷͲ͜Ͱ࣮ߦʹ͕͔͔͍࣌ؒͬͯΔͷ͔Λݟ͚ͭΔ • ؔ਺ݺͼग़͠ͷճ਺ • ؔ਺ݺͼग़͠ʹ͔͔Δ࣌ؒ • ϧʔϓճ਺ • ϓϩϑΝΠϥ • ϓϩϑΝΠϦϯάͷͨΊͷπʔϧ • gccͳΒgprof
  87. ίϯύΠϧ࣌ʹࢦఆ main_gprof.c -g σόοά৘ใੜ੒ -pg ϓϩϑΝΠϦϯά৘ใੜ੒ -o ੜ੒όΠφϦϑΝΠϧ໊ ࣮ߦ͢Δͱgmon.out ͱ͍͏ϑΝΠϧ͕Ͱ͖Δ

  88. HQSPGͷग़ྗ gprofɿϓϩϑΝΠϥ -bɿग़ྗΛ୹͘ ࣮ߦόΠφϦ ϓϩϑΝΠϧ৘ ใϑΝΠϧ ݺͼग़͞Εͨ ճ਺ ݺͼग़͋ͨ͠Γ ͷ

    ߹ܭ࣮ߦ࣌ؒ ߹ܭ ࣮ߦ࣌ؒ
  89. HQSPGͷग़ྗ 2000ճͷݺͼग़͠ͷ͏ͪ myfunc_2͔Β500ճ myfunc_3͔Β1500ճ

  90. None
  91. %PDLFSͰQZUIPOΛσόο ά ίʔυ͸͔͜͜Βμ΢ϯϩʔυ

  92. ndocker-compose.yml services: mypython: build: ./ volumes: - ./:/mnt tty: true

    EPDLFSDPNQPTFΛར༻͢Δ ndockerfile FROM python:slim RUN pip install pylint flake8 WORKDIR /mnt linterΛ2छྨ ೖΕ͓ͯ͘
  93. EPDLFSDPNQPTFͰίϯςφΛىಈ ஫ҙɿ docker-compose͸ ࣮ߦ͢ΔσΟϨΫτϦʹґଘ͢Δ buildͤͣʹ ௚઀upͯ͠΋OK ʢbuild͕૸Δʣ up: ίϯςφͷىಈ -d:

    όοΫάϥ΢ϯυͰىಈ ىಈதͷ ίϯςφΛ දࣔ
  94. ίϯςφΛબ୒ ͜ΕΛԡͯ͠ɽɽɽ

  95. ϑΥϧμΛબΜ Ͱɽɽɽ OK!

  96. ֦ுػೳΛೖΕ Α͏ pythonͰݕࡧ Microsoftͷ python֦ுΛΠϯε τʔϧ

  97. pythonίʔυΛ બΜͰ ͲͷpythonΛ࢖ ͏͔Λબ୒ ࢖͏΋ͷΛબͿ ʢ͜͜Ͱ͸1ͭ ͔͠ͳ͍ʣ ͜ͷϖʔδͷ಺༰͸ߦΘͳ͍Ͱ͍ͩ͘͞ ʢ͢ͰʹઃఆࡁΈͰ͢ɽࣗ෼Ͱ࠷ॳ͔Β࡞Δ৔ ߹ͷͨΊͷઆ໌Ͱ͢ʣ

  98. ͢Δͱ͜ͷϑΝΠ ϧ͕ग़དྷ্͕Δ બΜͩpython͕ද ࣔ͞Ε͍ͯΔ ͜ͷϖʔδͷ಺༰͸ߦΘͳ͍Ͱ͍ͩ͘͞ ʢ͢ͰʹઃఆࡁΈͰ͢ɽࣗ෼Ͱ࠷ॳ͔Β࡞Δ৔ ߹ͷͨΊͷઆ໌Ͱ͢ʣ

  99. σόοάͷλϒ ͔Β ઃఆϑΝΠϧΛ ࡞੒ ͜ͷϖʔδͷ಺༰͸ߦΘͳ͍Ͱ͍ͩ͘͞ ʢ͢ͰʹઃఆࡁΈͰ͢ɽࣗ෼Ͱ࠷ॳ͔Β࡞Δ৔ ߹ͷͨΊͷઆ໌Ͱ͢ʣ

  100. ͜ΕΛબ୒ ʮcurrent active fileʯ ͜ͷϖʔδͷ಺༰͸ߦΘͳ͍Ͱ͍ͩ͘͞ ʢ͢ͰʹઃఆࡁΈͰ͢ɽࣗ෼Ͱ࠷ॳ͔Β࡞Δ৔ ߹ͷͨΊͷઆ໌Ͱ͢ʣ

  101. ࡞੒͞ΕΔlaunch.jsonʹ ͜ͷߦΛબ୒ ʢcwdͷઃఆʣ ͜ͷϖʔδͷ಺༰͸ߦΘͳ͍Ͱ͍ͩ͘͞ ʢ͢ͰʹઃఆࡁΈͰ͢ɽࣗ෼Ͱ࠷ॳ͔Β࡞Δ৔ ߹ͷͨΊͷઆ໌Ͱ͢ʣ

  102. ͜ͷ࣮ߦϘλϯΛԡ͢ͱ σόοΫ։࢝ ϒϨʔΫϙΠϯτ͸ࢦఆ ͓ͯ͘͠

  103. ࢦఆͨ͠ϒϨʔΫϙΠ ϯτͰࢭ·ͬͨ continue step over step in step out ʢؔ਺Λ࠷ޙ·Ͱ࣮ߦ

    ͯ͠ൈ͚Δʣ ऴྃ
  104. step over / in / outͰ σόοάத

  105. Τϥʔ͕ى͖Δͱ ͜ͷΑ͏ͳදࣔʹͳΔ

  106. ίϚϯυύϨοτ͔Β select linter Λݕࡧͯ͠ɽɽɽ

  107. pylintΛબ୒ flake8Ͱ΋ྑ͍

  108. Θ͟ͱΧοίΛ༨෼ʹ෇͚ͯΈͨྫ linter͕ܯࠂΛදࣔ͢Δ

  109. None
  110. ՝୊ nDockerͱVScodeͰ • gdbΛ࢖ͬͯσόοάΛߦ͏ • lintΛ࢖ͬͯ੩తղੳΛߦ͏ • gprofΛ࢖ͬͯϓϩϑΝΠϦϯάΛߦ͏ • pythonͷσόοάΛߦ͏

  111. ૝ఆࢼݧ໰୊ nprintจσόοάͱɼͦͷ໰୊఺͸Կ͔Λઆ໌ͤΑ ngdbͷίϚϯυͷҙຯͱ࢖͍ํΛઆ໌ͤΑ • p, n, c, s, b, d

    • where, watch, display n੩తղੳͱ͸Կ͔ɼͦͷ༗༻ੑΛઆ໌ͤΑ nϓϩϑΝΠϦϯάͱԿ͔ɼͦͷॏཁੑΛઆ໌ͤΑ ndockerͱdocker-composeͷҧ͍Λઆ໌ͤΑ