そのプロセスにアタッチ -> coreファイル作成 -> デタッチ を流してやってくれるというもの。
PIDを複数渡した場合はそれら全てのプロセスに対してこれをやってくれるはずなんだけど、
ちょっとバグがあって上手く行かない。
..
62 # Loop through pids
63 for pid in $*
64 do
65 # Write gdb script for pid $pid.
66 cat >>$tmpfile <<EOF
67 set pagination off
68 set width 0
69 set height 0
70 attach $pid
71 gcore $name.$pid
72 detach
73 quit
74 EOF
75
76 # `</dev/null' to avoid touching interactive terminal if it is
77 # available but not accessible (SIGTTIN risk)
78 gdb -x $tmpfile -batch </dev/null
..
テンポラリファイルにgdbコマンドを詰め込んでgdb -xで非対話に食わせるわけだけれども、
これに2つ以上のPIDを渡すと、
1) 1つめのPIDについてgdbコマンドを$tmpfileに書き込む
2) gdb非対話モードで$tmpfileを実行
2-1) 表示を整えて
2-2) 1つめのPIDにアタッチして
2-3) core吐かせて
2-4) デタッチして
2-5) gdbを終了
3) 2つめのPIDについて、gdbコマンドを$tmpfileに追記する
4) gdb非対話モードで$tmpfileを実行
4-1) 2-1~2-5をやる
4-2) gdbが既に終了しているので2つ目のPIDについて$tmpfileに追記された部分は読み取られない
5) 3つ目のPIDについて..
Σ(゚д゚lll) ダメじゃん!?
66行目の>>を>に書き換えたらちゃんと動きました。
bug-gdbでも誰も何も言わないというのは、まあ誰も使わないってことだろうか。
https://lists.gnu.org/mailman/listinfo/bug-gdb/
MySQL Bugs、簡単に投稿出来て良いなぁとか思った。
でもMySQLのバグメーリングリストは死んでるよね。
もともとはBugsに上げたらMLにも投げよう、とかそういう感じだった気がするんだけども。
0 件のコメント :
コメントを投稿