detach

連続運用中にちょっとだけ止めて中身を確かめたい,なんてことはよくある話.

しかし,gdbスタブにDコマンド(GDBのdetachコマンドと相応)が無いと,ターゲットはGDBの終了後に止まった状態から復帰できない.


GDBは,終了時にスタブに対してkコマンドを必ず*1出す.
kコマンドはFIXMEとドキュメントに書かれるほど挙動が読めないコマンドである.これを逆手に取ってkでデバッガが制御を手放すstub実装も考えられなくはない.
けれど,kill request と定義されているコマンドで復旧するのは気持ち悪い.


他のスタブ実装では,どうだろう.例によって,CQ版のgdbstubではdetechの実装はあっさり無視されている.
本家gdbstubでは,i386-stub.c でdetachに対応していない.こっちは意外.そのまま流用しているKozosも無し.
RedBootなど他の実装については調べていない.まあでも無いと困るはずなので,実装してあるのだろうと思う.


自作スタブにDコマンドを追加するのは簡単.GDBにOKを返さなければいけないほかは,Cコマンド(実行再開)と変わらない.
Interface誌2007年12月号P.66によると,Dコマンドは返答を見ないとのことなのだが,Debugging with GDB には Reply がある旨の明示がある.実際に手持ちの環境でOKを省いたら,タイムアウトだとGDBに怒られた.ので,まあ,そういうことなのだろう.

*1:リモートデバッグの場合 target remote で接続してなければ