C++のSTLコンテナをgdbデバッグでprintする

古いgdb(Python未対応の7.0未満)だと、std::vectorなどのSTLコンテナな変数の中身を直感的な方法で見ることができない。下記のページに詳しい。
gdbでSTLのコンテナの値を表示する方法 (ぴょぴょぴょ? - Linuxとかプログラミングの覚え書き)

とりあえず下記のようにすれば表示できるようなのでメモっておく。
(gdb) p myvec._M_impl._M_start[0]@2
$10 = {0, 1}
ただ最近のgdb(7.0以上)だと、普通に表示されてしまう。
(gdb) p myvec[0]@2
$11 = {0, 1}

事情があって新しいgdbを使えない場合は、このへんから辿ってマクロ(3795497655-stl-views.gdb)を手にすると便利なのかもしれない。

ちなみに、新しいgdbでも print /r を使うと従来式の表示になってくれる模様(Thanks to This page.)
(gdb) p myvec
$12 = std::vector of length 24, capacity 32 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23}
(gdb) p /r myvec
$13 = { >> = {
_M_impl = {> = {<__gnu_cxx::new_allocator> = { s>}, }, _M_start = 0x614fb0, _M_finish = 0x615010,
_M_end_of_storage = 0x615030}}, }

...みたいな感じのことがわかったので記事にまとめようと思っていたら、英語ではあるものの、GDB WikiのSTL Support Toolsにズバリがまとまっていた。効率的な開発ってなんだろう、と思う日曜の夜更けだった。

このブログ記事について

このページは、らるるが2017年10月 2日 00:43に書いたブログ記事です。

ひとつ前のブログ記事は「「新装版リファクタリング―既存のコードを安全に改善する」読んだ」です。

次のブログ記事は「TIME_WAIT関連のメモ」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

月別 アーカイブ

ウェブページ

Powered by Movable Type 7.5.0