gdbでvectorなどSTLのコンテナの中身をprintしようとすると、例えば以下のようにうまく表示できません。
(gdb) p x1 $1 = {<std::_Vector_base<int, std::allocator<int> >> = { _M_impl = {<std::allocator<int>> = {<__gnu_cxx::new_allocator<int>> = {<No data fields>}, <No data fields>}, _M_start = 0x8003b9e8, _M_finish = 0x8003b9fc, _M_end_of_storage = 0x8003b9fc}}, <No data fields>}
中身をうまくprintする方法がSTLSupport - GDB Wikiに載っています。ここでその方法を簡単に紹介します。gdb 7以降でないとできないそうなので注意。
- 適当な場所で
svn co svn://gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python
する- ここでは、
/home/(ユーザ名)/scripts/gdb_printers/
にcdした後上記コマンドを打ったものとします。
- ここでは、
- ~/.gdbinitに以下のようなファイルを作成する。パス名は適宜書き換えてください。
python import sys sys.path.insert(0, '/home/(ユーザ名)/scripts/gdb_printers/python') from libstdcxx.v6.printers import register_libstdcxx_printers register_libstdcxx_printers (None) end
正しく設定ができると、以下のように読みやすい表示が得られます。
(gdb) p x1 $1 = std::vector of length 5, capacity 5 = {1, 1, 4, 9, 10}