Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
PHPerKaigi 2024 - PHP 本体のバグを見つけたら適切に報告しよう
Search
Go Kudo
March 11, 2024
Technology
2.7k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
PHPerKaigi 2024 - PHP 本体のバグを見つけたら適切に報告しよう
Go Kudo
March 11, 2024
More Decks by Go Kudo
See All by Go Kudo
phpcon2024_kudo_tmp
zeriyoshi
0
140
Other Decks in Technology
See All in Technology
#jawssonic2026 あの時代が悪かった ~動かなかったSageMakerと共に迎えたイベント当日~
ktkn1129
0
150
2026_devsumi_ozono.pdf
o3
3
410
株式会社シーエーシー エンジニア向け会社紹介資料
cac
0
57k
ペアプロの価値はコードを書くことだけじゃない
codmoninc
PRO
0
200
SQL文一行も書けない人事がCortexもろもろを使って人事業務を楽にしてみる
ponponmikankan
1
220
[2026-09-11]SREは誰のもの?運用エンジニアが始める 「SRE領域への越境」とチームの進化の軌跡 〜Road to NEXT CRE
tosite
0
160
AI時代だからこそ、スケールしないことをやろう
yutashigemura
1
150
アプリをもっと"iOSアプリっぽく"する小さな工夫 / Small Touches That Make Your App Feel More Like an iOS App
matsuji
1
620
Gitは怖い?共有ワークスペースから始めるSnowflakeチーム開発
coco_se
0
180
Claude in Chrome 入門 / Introduction to Claude in Chrome
cielo1985
0
460
AIで仕事のやり方を変える
matsu7874
3
1.1k
AI活用の現在地、 ちゃんと見えてますか?/XPfest-2026
visional_engineering_and_design
0
200
Featured
See All Featured
Building Adaptive Systems
keathley
44
3.2k
Designing Experiences People Love
moore
143
24k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
330
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
500
Product Roadmaps are Hard
iamctodd
55
13k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
RailsConf 2023
tenderlove
30
1.5k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Balancing Empowerment & Direction
lara
6
1.3k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.6k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
Transcript
PHP 本体のバグを見つけたら 適切に報告しよう 工藤 剛
• 社会人 6 年目 • モバイルゲーム会社勤務 ◦ お仕事で PHP 利用中
▪ たまに php-src にコントリビュートしたり OSS 出したりも • 興味対象 ◦ PHP ◦ 自作キーボード ◦ 電子工作 自己紹介
PHP のバグを踏んだことは ありますか?
では... バグ報告しましたか?
ぶっちゃけ難しい!
• 実行環境の情報 ◦ バージョン ◦ OS ◦ etc • 再現コード
バグ報告に必要なもの 簡単なバグなら これだけで十分だが...
特定の状況下でしか発生しないバグも多い • 数リクエスト処理後に発生 • 数時間すると発生 • OPcache 有効時にのみ発生 • etc…
だいたいの不具合はより複雑 再現できないバグは 修正できない!
• デバッグビルドでの検証結果 ◦ 拡張の有効・無効状態の詳細 ◦ 実行環境情報 ◦ スタックトレース バグ報告するときに更に役立つもの
• デバッグビルドでの検証結果 ◦ 拡張の有効・無効状態の詳細 ◦ 実行環境情報 ◦ スタックトレース バグ報告するときに更に役立つもの
デバッグビルド とは
バグを見つけやすい形でビルドされた PHP 基本的にバイナリで提供されていない=自分でビルドが必要 デバッグビルド版 PHP
PHP のビルドは 難しいって聞いたんだけど...
Debian 系ならこれだけ 踏んだバグの部分に応じて 適宜ライブラリを追加 & 拡張を有効化 (PDO など) 最低限のビルドならそんなに難しくない $
sudo apt-get update $ sudo apt-get install -y build-essential autoconf autotools-dev re2c bison git $ git clone https://github.com/php/php-src $ cd php-src $ ./buildconf --force $ ./configure --disable-all --disable-phpdbg --disable-cgi --disable-fpm --enable-cli --enable-debug $ make -j$(nproc) $ ./sapi/cli/php
もっと簡単に!
$ docker run --rm -it php:8.3.0-cli /bin/bash # php -r
'var_dump(range(9.9, "0"));' Segmentation fault PHP 8.3.0 のバグを再現してみる
# docker-php-source extract # cd /usr/src/php # ./configure --disable-all --enable-debug
# make -j$(nproc) # ./sapi/cli/php -v PHP 8.3.0 (cli) (built: Mar 8 2024 12:56:02) (NTS DEBUG) Copyright (c) The PHP Group Zend Engine v4.3.0, Copyright (c) Zend Technologies # ./sapi/cli/php -r 'var_dump(range(9.9, "0"));' Segmentation fault そこからデバッグビルド版にする
# apt-get update # apt-get install -y gdb # gdb
--args ./sapi/cli/php -r 'var_dump(range(9.9, "0"));' (gdb) run Starting program: /usr/src/php/sapi/cli/php -r var_dump\(range\(9.9,\ \"0\"\)\)\; [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/aarch64-linux-gnu/libthread_db.so.1". Program received signal SIGSEGV, Segmentation fault. zif_range (execute_data=0xfffff7a130f0, return_value=0xfffff7a13070) at /usr/src/php/ext/standard/array.c:2963 2963 unsigned char low = (unsigned char)Z_STRVAL_P(user_start)[0]; gdb を入れてスタックトレースを取る 原因の行まで 特定できた!
gdb の画面で “backtrace” 詳細なバックトレースを出力
もっと見やすく!
PHP (php-src) には gdb 用の補助スクリプトが同梱されている ネストした PHP スクリプトも簡単にトレースできる # gdb
--command /usr/src/php/.gdbinit --args ./sapi/cli/php <PHPファ イル> zbacktrace
ごく稀に発生するやつは どうする?
gdb はコアダンプからもスタックトレースを解析できる! # gdb <実行ファイルのパス> <コアダンプのパス> --command <.gdbinit へのパス> コアダンプを取って解析する
プロダクション環境に デバッグビルドを入れるの 困難では?
頑張るしかない... おすすめは canary 環境にデバッグビルドの PHP を 仕込んでおき流量をコントロール canary 環境は APM
等入れていて遅くなっていることが多いので まだ許容できることが多い (はず) コアダンプ取りにくい問題
• バグ報告怖くない! ◦ ここまで詳細にレポートできなくてもとにかく上げるのが大事 ◦ 報告されなかったばかりに放置されている不具合もあった ▪ DateTime 周り https://github.com/php/php-src/pull/11473
• やってみようという心意義を大切に! • わからなければ聞いてください! ◦ X: https://x.com/zeriyoshi やろうよ!バグ報告