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.8k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
PHPerKaigi 2024 - PHP 本体のバグを見つけたら適切に報告しよう
Go Kudo
March 11, 2024
Transcript
25 slides
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 やろうよ!バグ報告
More Decks by Go Kudo
See All by Go Kudo
phpcon2024_kudo_tmp
zeriyoshi
0
140
Other Decks in Technology
See All in Technology
うちなーぐちが認識できるなら、秋田弁もいけるはず!? Amazon Transcribe方言チューニング検証
ryouto715
1
160
Context != Context: One window, many lifecycles (AI Native DevCon, Nov 2026)
birgitta410
0
110
慶應義塾大学 AI実践05 論文執筆の仕組み化
keio_smilab
PRO
7
3.8k
Context Ontology Accelerator 入門 (業務データの意味を、AI エージェントに渡す)
inariku
PRO
3
620
サボる子はいねぇがー!AgentCoreハーネスの脆弱性に学ぶ、エージェントの入力バリデーション
iwamot
PRO
5
320
狙われているAPIの脆弱性!今こそ手をつけるべき根本的な対策とは?
nagix
0
110
並列度を下げたら速くなった — go build の重複コンパイルを実測で見る
tomoaki25
2
1.1k
「いつか使う」の「いつか」は来ない 〜AI駆動開発における「作らない」判断について〜
ikki0006
0
200
GCASアップデート(202607-202610)
techniczna
1
250
これからのデータエンジニアの役割について考える / Rethinking the Role of Data Engineers in the AI Era
okiyuki99
0
360
81天的 AI Agent 軟體開發團隊治理實務分享
regionbbs
0
150
[General] 개발자로 해외 기업에서 일하기
skydoves
1
330
Featured
See All Featured
It's Worth the Effort
3n
188
29k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
530
Evolving SEO for Evolving Search Engines
ryanjones
0
360
Navigating Team Friction
lara
192
16k
How to Think Like a Performance Engineer
csswizardry
28
2.9k
The agentic SEO stack - context over prompts
schlessera
0
1k
Building AI with AI
inesmontani
PRO
1
1.4k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
2
980
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
1
240
Designing for Performance
lara
612
70k
A better future with KSS
kneath
240
18k