Visual C++ Team Blogにてstd::functionのデバッグを改善したとの記事が上がりました。
F11でステップインする時にstlの内部実装に入る事無くデバッグしたい箇所にステップイン出来ています(ライセンスとか知らないので記事参照
Visual Studioバージョン15.5から使えるようです
Improving the debugging experience for std::function
下記のユーザーの声を反映したとの事
Make StepInto a std::function go directly to the implementation without stepping into std library code.
自分のライブラリで試してみる
本題です。
自作ライブラリでもこんな便利機能使いたい!って事でstd::functionの実装を見て見ました。
見てみると飛ばしたい箇所と止めたい箇所にマクロを入れているのが分かります
自分のライブラリでも試してみます
※ Visual Studioバージョン15.5.6での実装です。公式ドキュメントも無いので今後使えなくなる可能性はあります
実装
ステップイン機能未実装
namespace test
{
class function
{
using func_type = void(*)();
func_type _pred;
public:
function(func_type _f) noexcept
: _pred(_f)
{}
void operator() () const noexcept
{
_pred();
}
};
}
ステップイン機能実装後
namespace test
{
class function
{
using func_type = void(*)();
func_type _pred;
public:
function(func_type _f) noexcept
: _pred(_f)
{}
void operator() () const noexcept
// 飛ばしたい箇所
#ifndef _DEBUG_FUNCTIONAL_MACHINERY
#line _DEBUGGER_STEP_OVER
#endif /* _DEBUG_FUNCTIONAL_MACHINERY */
{
// 内部実装を見たい
#ifndef _DEBUG_FUNCTIONAL_MACHINERY
#line _DEBUGGER_STEP_INTO
#endif /* _DEBUG_FUNCTIONAL_MACHINERY */
_pred();
// 飛ばしたい箇所
#ifndef _DEBUG_FUNCTIONAL_MACHINERY
#line _DEBUGGER_STEP_OVER
#endif /* _DEBUG_FUNCTIONAL_MACHINERY */
}
};
}