Slide 1

Slide 1 text

May the PHP dev be with xdebug — ʲඇެࣜʳPHPΧϯϑΝϨϯε෱Ԭશવ໺ࡊ — 2023/06/22 — uzulla

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

ࣗݾ঺հ — uzulla — ྲྀ͠ͷPHPer — ࠓ೔MBPͷέʔϒϧ͕ম͚·͕ͨ͠ަ׵Ͱ͖·ͨ͠

Slide 6

Slide 6 text

xdebug͔ͭͬͯ·͔͢ʁ — ʮ͔ͭͬͯΔΑɺεςοϓ࣮ߦͱ͔Break pointͰ͠ΐʁʯ — ʮͳΜ͔var_dump͕೿खʹͳΔΑͶʯ — ʮઃఆ໘౗͔ͩΒPrint debugͯ͠·͢ʯ

Slide 7

Slide 7 text

࠷ॳʹɺࡢࠓ(ver 3)ΠνΦγͷػೳ — ʮxdebugͷϩάʯʮ͑ͬʯ — ͪΐͬͱલ·Ͱɺxdebug͕ʮͳΜͰ͏͔͝ͳ͍ͷ͔ʯௐ΂Δͷେมͩͬͨ — xdebugͷϓϩ(ʁ)͕Τεύʔ͢Δ͜ͱ͕ଟ͔ͬͨ — ࠓ͸ৄࡉͳϩά͕ग़ͤΔͷͰࣗݾղָܾ͕ʑʂʂʂ # in php.ini (PHP_INI_SYSTEM) xdebug.log_level = 10 xdebug.log = /tmp/xdebug.log # ࠓճͷαϯϓϧɺҎԼʹ͋Γ·͢ # https://github.com/uzulla/phpconfuk2023-zenzenyasai-demo-code

Slide 8

Slide 8 text

ྫɺConfig͕ݹ͍ͱ͔ [20] [Config] CRIT:The setting 'xdebug.remote_host' has been renamed, see the upgrading guide at https://xdebug.org/docs/ upgrade_guide#changed-xdebug.remote_host

Slide 9

Slide 9 text

ྫɺ઀ଓͰ͖ͳ͍ͱ͔ [16] [Step Debug] INFO: Connecting to configured address/port: localhost:9003. [16] [Step Debug] WARN: Creating socket for 'localhost:9003', poll success, but error: Operation now in progress (29). [16] [Step Debug] WARN: Creating socket for 'localhost:9003', connect: Cannot assign requested address. [16] [Step Debug] ERR: Could not connect to debugging client. Tried: localhost:9003 (through xdebug.client_host/xdebug.client_port).

Slide 10

Slide 10 text

ϩά͸Ғେ — ͳΜ͔ಈ͔ͳ͍࣌͸͜ΕΛΈΖɺશ෦͜͜ʹ͋Δ — σόοΨ͕PhpStormͱ͔ʹͭͳ͕Βͳ͍ͷ͕Ұ൪೉͍ͬͯ͠ΈΜͳݴͬͯΔ͠… — ͦͷଞɺ௨৴಺༰ΛΈΔͱඇৗʹଟ͘ͷ৘ใ͕ಘΒΕ·͢ʂ ... [18] [Step Debug] <- step_into -i 10 [18] [Step Debug] -> ... [18] [Step Debug] <- breakpoint_set -i 16 -t line -f file:///var/www/html/index.php -n 25

Slide 11

Slide 11 text

xdebug_info() — Τεύʔճආʹ༗༻ — ʮͳʹ͕Enableͳͷ͔ʯ — ʮͲ͜ʹͭͳ͗ʹ͍ͬͯΔͷ͔ʯ — ʮͲ͏͍͏Ϟʔυͳͷ͔ʯ — ౳Λ͠Β΂Δͷ͕͛͢ʔָʹ… — Doc΁ͷϦϯΫ΋͋Δ

Slide 12

Slide 12 text

ͯ͞ɺࠓճ঺հ͢Δ໘നػೳ eval — ਖ਼໊ࣜশ͸͠Βͳ͍ — evalͰ͖Δ — ʮͲ͜ͰͰ΋ʯ

Slide 13

Slide 13 text

DEMO — PhpStorm+xdebug — σόοΨͰܭࢉػΛ͓ͯ͠৭ʑͰ͖Δ

Slide 14

Slide 14 text

ͳΜͰ΋Ͱ͖Δ — ม਺ͷ্ॻ͖ͱ͔͕Ͱ͖Δ — Ϋϥεͱ͔ͷϩʔυ΋Ͱ͖Δ — PDOͷ৐ͬऔΓͱ͔΋Ͱ͖Δ — ϑΝΠϧͷಡΈॻ͖΋Ͱ͖Δ — ϦΫΤετσʔλͷμϯϓɺϩʔυͱ͔ — ೔෇ͳͲͷվม — ͳΜͳΒɺ͜͜Ͱrequire_once͔Β શ෦ͷίʔυ Λॻ͍ͯΈΔ͜ͱ΋Ͱ͖Δ — (ͨͩɺGOTO͸͔ͭ͑ͳ͍ΜͩΑͶɺ࣍ͷߦΛʮεΩοϓʯͱ͔Ͱ͖ΔͱָͳΜ͚ͩ Ͳɻ·͋ifจͰ͘͘Ε͹Ͱ͖ͳ͍͜ͱ͸ͳ͍)

Slide 15

Slide 15 text

Ͳ͏ͯ͠΋ϩάΛݟͨ͘ͳ͍ਓ΋͜͜ͰΈΕͯศརͰ͢Ͷʂʂʂ

Slide 16

Slide 16 text

͋ʔɺಥવ෸͘NoticeͰBreak͍ͨ͠ΑͶɺͲ͏͠Α͏… ͋ͱ͸Fatalͱ͔Ͱ΋औΓ͍ͨΑͶ…

Slide 17

Slide 17 text

ͬͯ࣌ʹɺϓϩͷPHPer(ʁ)ͳΒϋϯυϥΛ͍ΕΔΑͶʂ

Slide 18

Slide 18 text

(ͪΐͬͱͨܽ͠఺ɺ͜͜ͷը໘Ͱ͸ิ׬͸͖͚͘Ͳɺίʔυδϟϯϓ͸Ͱ͖ͳ͍)

Slide 19

Slide 19 text

ʮධՁ෇͖Break point͏͔͝ͳ͍ͳ…ʯ͔Βͷʮ୅ೖͯ͠Δ΍Μ͚ʂʂʯ(͋Δ͋Δ)

Slide 20

Slide 20 text

tips(?): ެࣜͷDocΛΈΖ — ౰ͨΓલ͗͢Δ͕ɺ͋ΒΏΔ৘ใ͸ެ͕ࣜਖ਼͍͠ — ͱ͍͏͔ɺάάΔͱग़ͯ͘Δ৘ใ͸xdebug2ͷ৘ใ͕ଟ͍ — 2->3Ͱ͔ͳΓมΘͬͨˍΈΜͳखบͰ΍ͬͯΔˍൿ఻ͷλϨͰɺ݁ߏϋνϟϝνϟ — ΑΈͳ͸Ε — ެࣜͷYoutube΋ඞݟ — https://www.youtube.com/@DerickRethansXdebug/playlists

Slide 21

Slide 21 text

ͦͷ΄͔ — ϓϩϑΝΠϥ…͸ɺseike͞Μͱ͔͕ྑ͍هࣄΛ͔͍͍ͯΔͷͰ — https://tech.fusic.co.jp/posts/2020-12-14-php8-xdebug-webgrind/ — coverageɺtrace΋ͨͷ͍͚͠Ͳɺࠓ೔͸লུ — DBGp Proxy Tool ΋ศར΍Ͱ — This tool allows you to proxy and route debugging request to IDEs depending on which IDE key is in use. — stgαʔόʔͱ͔ʮෳ਺ਓͰ৮ΔαʔόʔʯͰ΋xdebug࢖͏࣌ʹͲ͏ͧ — https://xdebug.org/docs/dbgpProxy

Slide 22

Slide 22 text

·ͱΊ — ॻ͖׵͑ͯϦϩʔυ஍ࠈͱ͔ෆศ͗͢Δ… xdebugͷEvalͰॎԣແਚ͠Α͏ͥʂ — ʮ͜ͷIFͷcondͲ͏͢Ε͹͍͍͔ͳʯͱ͔ͷࢼߦࡨޡ͕ແݶʹͰ͖Δ — PHP͸ಈతݴޠͳͷͰɺevalͰ͖ͯศརʂ — (PsySHͱ͔΋͋Δ͚ͲɺPhpStorm+xdebugͷ΄͏͕΍ͬͺΓศརɺิ׬͋Δ͠) — ެࣜαΠτ΋ͦ͏͕ͩɺ࡞ऀͷYoutube΋ඞݟ — (όʔδϣϯʹΑͬͯػೳ͕;͑ͨΓɺมΘͬͨΓ͢Δͷ͸஫ҙ) — PhpStormͩͱUI΋Α͘Ͱ͖ͯ·͢Ͷʂ…͑ͬVSCʁ͏Μ…͕Μ͹ͬͯ… — ΋ͬͱ׆༻ͯ͠ΨϯΨϯ΍͍ͬͯ͜͏ͳʂ — ࣭໰͋Γ·͔͢ʁ