2017年10月アーカイブ

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月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2017年8月です。

次のアーカイブは2018年1月です。

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

月別 アーカイブ

ウェブページ

Powered by Movable Type 5.2.13