$30 off During Our Annual Pro Sale. View Details »

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

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

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

Tomoya-Suzuki

December 12, 2020
Tweet

More Decks by Tomoya-Suzuki

Other Decks in Programming

Transcript

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

    View Slide

  2. 2
    事業売却と資金調達で次のステージへ

    業界初の買い手の顔が見えるM&Aプラットフォーム


    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  11. 私「やりたくない」

    View Slide

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

    View Slide

  13. ちゃんと調べました

    View Slide

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

    View Slide

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

    View Slide

  16. core dump 出た!

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  21. おしまい
    ● セグフォ といえば core dump、覚えて行ってね!
    ● 詳細は qiita に書いておきました
    ○ https://qiita.com/yamotuki/items/4cec5359a3edec07bddf

    View Slide

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

    View Slide