Upgrade to Pro — share decks privately, control downloads, hide ads and more …

再コンパイル不要._core_dump_さえ吐ければ_gdb_デバッグできます.pdf

 再コンパイル不要._core_dump_さえ吐ければ_gdb_デバッグできます.pdf

PHP Conference 2020 のLTで発表した資料です。

7e9e111546b163cc05d517eec128c04f?s=128

Tomoya-Suzuki

December 12, 2020
Tweet

Transcript

  1. 再コンパイル不要! core dump さえ吐ければ gdb デバッグできます 鈴木智也(@yamotuki)

  2. 2 事業売却と資金調達で次のステージへ
 業界初の買い手の顔が見えるM&Aプラットフォーム


  3. セグフォといえば core dump 覚えていってね 伝えたいこと

  4. 初めての人向け(セグフォとは) 説明 セグメンテーション違反はアクセスが許可されていないメモリ上の位置、もしくは許可さ れていない方法~~中略~~でメモリ上の位置にアクセスしようとするときに起こる (wikipedia 「セグメンテーション違反」より引用) 要するに メモリを触るプログラムがバグっていると起こる。プログラムが突然死ぬ。 PHPはよくテストされているのでPHPerが見ることは少ない。

  5. とある日 私「なんか開発環境で Laravel の Artisan コマンドが通らない。出力1行。」 私「他に出力は?」 コンソール「ないです」

  6. 私「詰んでるじゃん」

  7. けど、似た実装でコード沢山書かれてる。 撤退できない・・・

  8. 何か使えるものは・・・ 脳裏によぎる、「core dump 吐けばいいじゃん」の言葉。 そう。core dump さえ吐けばあとはなんとかなる。

  9. core dump とは(ざっくり) プロセスが死んだ時のメモリの状態が入っているファイルのこと

  10. core dump ってどう読み解くのだっけ? ?「エラーを吐いたバイナリ(PHP)を再ビルドして、core dump で状態復元して gdbで ステップずつ見ていくのだ」 参考: https://rat.cis.k.hosei.ac.jp/article/devel/debugongccgdb1.html

    ※gdb は昔からデバッグに使われている有名なツール
  11. 私「やりたくない」

  12. 気を取り直してまして

  13. ちゃんと調べました

  14. 実は再ビルド不要だった 参考にした神のブログ: http://sarface2012.hatenablog.com/entry/20101027 これでOK。例えばこういう感じ

  15. じゃあ core dump 吐くだけだね 設定ちょっと変えるだけ。 怖くないよ。 ※Amazon Linux v1 の場合。v2だとまた違うようです。

  16. core dump 出た!

  17. gdb に core dump 食わせる 死んだメソッドを教えてくれている!

  18. さらに情報取得 そのまま gdb コマンドの対話状態になるので、where コマンドを使う。 どこを実行中だったかを出してくれる。

  19. 問題が特定できた memcached の igbinary シリアライザーが問題だと分かった。 確かに設定が入っている。 before ->

  20. 解決! igbinary を使用する必然性がなかったので設定変更で解決。 after ->

  21. おしまい • セグフォ といえば core dump、覚えて行ってね! • 詳細は qiita に書いておきました

    ◦ https://qiita.com/yamotuki/items/4cec5359a3edec07bddf
  22. WE ARE HIRING! M&Aクラウドでは 一緒に働く仲間を募集しています PR https://www.wantedly.com/companies/macloud