gdbでSTLのコンテナをprintで表示する

  • 投稿日:
  • by
  • カテゴリ:



タイトルを英訳したらむごいことになりそうですな。


2年近く前の記事に検索で飛んでこられる方が散見されたのでアップデートしようと思い、検索して調べてみました。


STLが使えないワケ


http://d.hatena.ne.jp/syasuda/20080217/1203173449



STLコンテナをpコマンドで表示するとハナモゲラになってしまうという投稿から、gdb開発者?のウラジミールさんが、Pythonスクリプトでgdbの表示を整形するパッチを持っているという話題への流れです。


STLの実装ごとにスクリプトを切り替えなければならないようですし、リポジトリに取り込まれるのかもよく分かりませんが、期待して待ちましょう。



2年も経てば世の中変わるものです。

Pythonスクリプトの件は取りこまれたようです。*1


GDB: The GNU Project Debugger


http://sourceware.org/gdb/



October 06, 2009: GDB 7.0 Released!


・・・



  • Python scripting support


・・・



ただし使い方はまだまったく分かっていません。gdb+STLな仕事なんてやってませんし。手元で試したらまた記事にするかもしれません。


そんな最新版ははいってねーよという場合でもマクロでごにょるのが王道のようです。4.3くらいから使えるようです。


De-Referencing STL Containers:


http://www.yolinux.com/TUTORIALS/GDB-Commands.html#STLDEREF


仕組みについては良く分かる説明が日本語であるのを見つけました。


gdbでSTLのコンテナの値を表示する方法


http://d.hatena.ne.jp/pyopyopyo/20061004/p1


コンテナ(container)の中身ということはコンテニー(containee)ですな。


個人的にはイテレータの指すアドレスを見たほうが早い気がしますが、まぁそれはそれでナニですな。イテレータがあるなら、デバッグ用に変数へ代入すれば良いわけでして。




*1:ウラジミールさんのパッチかどうかは未確認というか確認する気もなし