パソコン・メモメモ備忘録

気の向くままパソコン関係等で気になることを書き記す。毎日更新を目指す!

VC++ での俺様配列クラスのデバッグ表示

職場で開発しているプログラムで、なぜか std::vector を使わず、俺様可変長配列クラスが良く使われている。それ自体はそんなに問題では無いが、Visual C++ 上でデバッグしている際、そのクラスのインスタンスの配列の中身を見たい時に、std::vector のように普通の配列として表示されない。このクラス、メモリ確保した先頭へのポインタと使っているサイズ等をメンバーとして持っているが、それがそのまま表示されるだけ。一応、このポインタの中を見れば、配列の最初の値だけは中を見ることができるが、それではあまりに役立たずだ。

もう数年になるだろうか、ちょっと中身を覗きたいだけなのに、適当な場所に、::OutputDebugString() やログファイルに配列の中身をダンプするコードをいちいち埋め込んで、中身を確認するという作業をしてきた。絶対、何かもっとスマートな方法があるはずだ、とは思いつつも調べずにいた。ふと今日、調べてみたら、まったくそのための機能が用意されているというブログ記事を見つけてしまった。

PLUTINUMGAMES PROGRAMMER'S BLOG さんの記事だ。VisualStudio が使っている autoexp.dat というファイルに、デバッグ時にクラスの中身をウォッチ等で見やすくするルールがずらずらっと書かれているということ。えっと、このファイルどこにあったかな? VisualStudio がインストールされているフォルダの奥の方の Debugger とかいうファルダにあったような。小生高性能ファイル検索ツール Everything を使っていて、すぐ見つかってしまうので、場所は気にしてなかったり。ちなみに、autoexp.dat の編集は管理者として実行したエディタでないとダメっぽいので注意(インストールした場所による)。

俺様可変長配列の場合は、std::vector 用の定義をコピーして、クラスの名前と、配列の長さや先頭を指定する部分を、対応したものに置き換えれば OK。上記ブログには、他にも色々応用が書いてある。Linked List なクラスでも、配列のように表示できたりするそうな。

しかし、これでデバッグの効率が圧倒的に上がった気がする。これまで中を覗けなかった可変長配列の中身とか見放題。素晴らしい。数値をわかりやすい表現方法で表示したり出来たりするのも便利そうだ。ずっと、この機能を知らずに開発を続けていたのが非常に悔やまれる。

自分が欲しいと思ったものは、他の人も欲しいと思っていて、それをすでに作っている人がいる確率は 95% を越えているような気がする。ということで、欲しいと思ったらまずは探す所から始めた方がいいのだろうか。自分でなんとかする事も大切だし、なかなか難しいものだ。