#import "@preview/touying:0.6.3": * #import "@preview/codly:1.3.0": * #import "@preview/cjk-unbreak:0.2.0": remove-cjk-break-space, transform-childs #import "@preview/fletcher:0.5.8" as fletcher: diagram, node, edge #import "setoka.typ": * #show: codly-init.with() #show: remove-cjk-break-space #show: setoka-theme.with( aspect-ratio: "16-9", config-info( title: [ Deep Dive into Xdebug ], subtitle: [PHP カンファレンス小田原 2026], author: [nsfisis (いまむら)], date: datetime(year: 2026, month: 4, day: 11), ), config-common(preamble: { codly( fill: rgb("#eee"), lang-format: none, number-format: none, zebra-fill: none, ) }) ) #set text(font: "BIZ UDPGothic", lang: "ja") #show raw: set text(font: "UDEV Gothic 35") #let box-color-highlight = rgb("#ffa500").lighten(60%) #let box-color-highlight2 = rgb("#ffa500") #let box-color-normal = rgb("#eee") #title-slide() #about-slide() #[ #set align(center + horizon) #set text(size: 40pt) Xdebug のステップ実行は\ どう実現されているのか ] --- #[ #set text(size: 30pt) Xdebug - PHP の拡張 (extension) - ステップ実行 - トレース - プロファイリング - コードカバレッジ計測 ] --- #[ #set align(center + horizon) 今回はステップ実行の話 ] --- #[ #set align(center + horizon) ステップ実行 #figure( image("./ss1.png", width: 60%) ) ] --- #[ #set align(center + horizon) ステップ実行 #figure( image("./ss2.png", width: 60%) ) ] --- #[ #set align(center + horizon) #set text(size: 32pt) ステップ実行は \ どのように実装されているのか? ] --- #[ #set align(center + horizon) #set text(size: 28pt) #diagram( spacing: 8em, node-stroke: 0.5pt, node((0, 0), [IDE], shape: rect, fill: box-color-normal, inset: 1em, corner-radius: 4pt), node((1, 0), [PHP + Xdebug], shape: rect, fill: box-color-normal, inset: 1em, corner-radius: 4pt), edge((0, 0), (1, 0), "->", shift: 8pt), edge((1, 0), (0, 0), "->", shift: 8pt), ) ] --- #[ #set align(center + horizon) #set text(size: 28pt) #diagram( spacing: 8em, node-stroke: 0.5pt, node((0, 0), [IDE], shape: rect, fill: box-color-highlight, inset: 1em, corner-radius: 4pt), node((1, 0), [PHP + Xdebug], shape: rect, fill: box-color-normal, inset: 1em, corner-radius: 4pt), edge((0, 0), (1, 0), "->", shift: 8pt), edge((1, 0), (0, 0), "->", shift: 8pt), ) ] --- #[ #set align(center + horizon) #set text(size: 28pt) #diagram( spacing: 8em, node-stroke: 0.5pt, node((0, 0), [IDE], shape: rect, fill: box-color-normal, inset: 1em, corner-radius: 4pt), node((1, 0), [PHP + Xdebug], shape: rect, fill: box-color-highlight, inset: 1em, corner-radius: 4pt), edge((0, 0), (1, 0), "->", shift: 8pt), edge((1, 0), (0, 0), "->", shift: 8pt), ) ] --- #[ #set align(center + horizon) #figure( image("./d78b28e5-0358-4e7e-a32b-fc20106f7547.png", width: 80%) ) ] --- #[ #set align(center + horizon) #set text(size: 28pt) #diagram( spacing: (0em, 1.5em), node-stroke: 0.5pt, node((0, 0), [ソースコード], shape: rect, fill: box-color-normal, inset: 0.5em, corner-radius: 4pt), node((0, 1), [AST], shape: rect, fill: box-color-normal, inset: 0.5em, corner-radius: 4pt), node((0, 2), [opcode], shape: rect, fill: box-color-normal, inset: 0.5em, corner-radius: 4pt), node((0, 3), [実行結果], shape: rect, fill: box-color-normal, inset: 0.5em, corner-radius: 4pt), edge((0, 0), (0, 1), "->"), edge((0, 1), (0, 2), "->"), edge((0, 2), (0, 3), "->"), ) ] --- #[ #set align(center + horizon) #set text(size: 24pt) #codly-range(2) ```php