Boost を使ったプログラムをデバッグする際に不便だなぁと思ったところがいくつかあったので、解決する方法を調べてみました。
1.boost::optional の中身が見れなくて不便
Boost.ML に autoexp.dat を書き換える方法が載ってるようです。 via Boost.Optional on Visual Studio IDE
ただし、↑のだと preview の部分しか定義してないので、中身まで詳しく見たいのであれば children も定義する必要がありそうです。
例えばこんな感じ。
children
(
#if (!$c.m_initialized)
(
#()
)
#else
(
#(value: *($T1*)&$c.m_storage.dummy_.data[0])
)
)
他にも Boost の中身が分かりにくいというのがあれば、autoexp.dat を使って見やすくすると良さそうです。
関連:[C++]autoexp.dat
2.boost::function の呼び出し先にステップインするのが面倒
boost::function の呼び出し先に飛ぶためには、boost::function のコードの中身をグリグリと進んでいく必要があるんですけど、それがものすごく面倒だったりします。
boost::function のコードはスルーしてくれればいいのにとか考えて調べていると、ほんとにそういう機能がデバッガにありました。
How to Not Step Into Functions using the Visual C++ Debugger
VC8 の場合であれば、HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0\NativeDE\StepOver の中に適当な名前の REG_SZ 型の値を作成して、
boost\:\:function.*=NoStepInto
と書けば、boost::function と書いてある全ての関数がスルーされるようになって、
#include <boost/function.hpp>
void func() { }
void main()
{
boost::function f(func);
f();
}
このプログラムの f() のところで F11 を押すと、func() の中にジャンプするようになりました。
boost::function だけでなく、Boost 全体のほとんどが見る必要がないというのであれば、
boost\:\:.*=NoStepInto
と書いておいて、Boost で見たい部分があれば、その都度 StepInto を指定すればいいかと思います。