Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
再コンパイル不要._core_dump_さえ吐ければ_gdb_デバッグできます.pdf
Search
Tomoya-Suzuki
December 12, 2020
Programming
0
530
再コンパイル不要._core_dump_さえ吐ければ_gdb_デバッグできます.pdf
PHP Conference 2020 のLTで発表した資料です。
Tomoya-Suzuki
December 12, 2020
Tweet
Share
More Decks by Tomoya-Suzuki
See All by Tomoya-Suzuki
安易に前職同僚飲み会に行ったら 売り上げのほぼないスタートアップに入社してた話
yamotuki
0
1.3k
Repositoryパターンを維持しながらN+1問題を起こさないようにする方法論について
yamotuki
2
1.6k
プログラマ三大美徳を実現するデプロイフローを目指して
yamotuki
0
1.2k
Other Decks in Programming
See All in Programming
エンジニアが挑む、限界までの越境
nealle
1
220
ComposeでWebアプリを作る技術
tbsten
0
110
MCP調べてみました! / Exploring MCP
uhzz
2
2.3k
SEAL - Dive into the sea of search engines - Symfony Live Berlin 2025
alexanderschranz
1
140
これだけは知っておきたいクラス設計の基礎知識 version 2
masuda220
PRO
24
6.5k
Defying Front-End Inertia: Inertia.js on Rails
skryukov
0
490
Fiber Scheduler vs. General-Purpose Parallel Client
hayaokimura
1
100
Lambda(Python)の リファクタリングが好きなんです
komakichi
3
200
新しいPHP拡張モジュールインストール方法「PHP Installer for Extensions (PIE)」を使ってみよう!
cocoeyes02
0
400
一緒に働きたくなるプログラマの思想 #QiitaConference
mu_zaru
22
5k
AIコーディングの理想と現実
tomohisa
23
31k
「理解」を重視したAI活用開発
fast_doctor
0
110
Featured
See All Featured
Being A Developer After 40
akosma
91
590k
A designer walks into a library…
pauljervisheath
205
24k
Designing Experiences People Love
moore
141
24k
What's in a price? How to price your products and services
michaelherold
245
12k
Faster Mobile Websites
deanohume
306
31k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
129
19k
StorybookのUI Testing Handbookを読んだ
zakiyama
29
5.6k
It's Worth the Effort
3n
184
28k
Music & Morning Musume
bryan
47
6.5k
For a Future-Friendly Web
brad_frost
176
9.7k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
Visualization
eitanlees
146
16k
Transcript
再コンパイル不要! core dump さえ吐ければ gdb デバッグできます 鈴木智也(@yamotuki)
2 事業売却と資金調達で次のステージへ 業界初の買い手の顔が見えるM&Aプラットフォーム
セグフォといえば core dump 覚えていってね 伝えたいこと
初めての人向け(セグフォとは) 説明 セグメンテーション違反はアクセスが許可されていないメモリ上の位置、もしくは許可さ れていない方法~~中略~~でメモリ上の位置にアクセスしようとするときに起こる (wikipedia 「セグメンテーション違反」より引用) 要するに メモリを触るプログラムがバグっていると起こる。プログラムが突然死ぬ。 PHPはよくテストされているのでPHPerが見ることは少ない。
とある日 私「なんか開発環境で Laravel の Artisan コマンドが通らない。出力1行。」 私「他に出力は?」 コンソール「ないです」
私「詰んでるじゃん」
けど、似た実装でコード沢山書かれてる。 撤退できない・・・
何か使えるものは・・・ 脳裏によぎる、「core dump 吐けばいいじゃん」の言葉。 そう。core dump さえ吐けばあとはなんとかなる。
core dump とは(ざっくり) プロセスが死んだ時のメモリの状態が入っているファイルのこと
core dump ってどう読み解くのだっけ? ?「エラーを吐いたバイナリ(PHP)を再ビルドして、core dump で状態復元して gdbで ステップずつ見ていくのだ」 参考: https://rat.cis.k.hosei.ac.jp/article/devel/debugongccgdb1.html
※gdb は昔からデバッグに使われている有名なツール
私「やりたくない」
気を取り直してまして
ちゃんと調べました
実は再ビルド不要だった 参考にした神のブログ: http://sarface2012.hatenablog.com/entry/20101027 これでOK。例えばこういう感じ
じゃあ core dump 吐くだけだね 設定ちょっと変えるだけ。 怖くないよ。 ※Amazon Linux v1 の場合。v2だとまた違うようです。
core dump 出た!
gdb に core dump 食わせる 死んだメソッドを教えてくれている!
さらに情報取得 そのまま gdb コマンドの対話状態になるので、where コマンドを使う。 どこを実行中だったかを出してくれる。
問題が特定できた memcached の igbinary シリアライザーが問題だと分かった。 確かに設定が入っている。 before ->
解決! igbinary を使用する必然性がなかったので設定変更で解決。 after ->
おしまい • セグフォ といえば core dump、覚えて行ってね! • 詳細は qiita に書いておきました
◦ https://qiita.com/yamotuki/items/4cec5359a3edec07bddf
WE ARE HIRING! M&Aクラウドでは 一緒に働く仲間を募集しています PR https://www.wantedly.com/companies/macloud