GNUウイーク - gccのC++化 / gdb7.5
なんというか今週はGNUウイークだったような気がする。最大のトピックはgccのC++化だけど、これはまぁ方々で語り尽くされているので。。
gdb 7.5
gdbの7.5も今週リリースされた。これは結構注目すべきアップデートで:
- Go言語のサポート
- Linux の OS情報取得機能
"info os"コマンドで、プロセスのリストやメッセージキュー等を取得できるようになった。
もちろん相応の権限が必要になるが、マルチプロセスデバッグのサポート等は熱い分野なので今後も充実が期待される。
この手のデバッグサポートの充実により、Cスタイルのマクロは今後ますます避けられるようになるかもしれない。DWARFはマクロに対するデバッグ情報もそれなりにサポートしているが、まだまだうまく活用されていない。
いわゆるDtraceのSDTに対してブレークを張ったりできるようになった。今のところSystemTapによって生成されたSDTにのみ対応している。
- x32 ABIのサポート
x32 ABIはポインタとして32bitを用いるx86-64 ABIのバリアントで、Intelが微妙に推進している。公式サイトはGoogle sites( https://sites.google.com/site/x32abi/ )だったりABIドラフト(のTeXソース)はGitHub( https://github.com/hjl-tools/X32-psABI )だったりとかなり方々で開発が展開されている。
- リモートスタブの強化とIn Process Agent(IPA)の導入
デバッグスタブに簡単なスタックベースのVMが導入され、gdb側からバイトコードを注入して細かい判断を行わせることができるようになった。
これは、条件付きブレークポイント等を高速に実行するために利用できる。バイトコードの仕様はgdbのマニュアルにある( http://sourceware.org/gdb/current/onlinedocs/gdb/Agent-Expressions.html )。
- gdb-tuiの本体への統合
cursesを持っていれば、GDB実行バイナリ自体が簡単なTUIを備えるようになる。これに伴い、gdb-tuiバイナリは廃止された。
- stdio経由のリモートスタブ
gdbserverとの通信にstdioが使えるようになった。この機能の強力な点はssh経由でgdbserverを起動するようなケースで:
(gdb) target remote | ssh -T hostname gdbserver - hello
のようにして子プロセスとしてgdbserver(に接続するssh)を起動できる。gdbserverはstderrとstdoutは適当にpipeしてデバッギを起動するので、出力の観察は依然可能となっている。
sshの向こうにあるプロセスをデバッグしたい時に役立つかもしれない。