LoginSignup
1

More than 5 years have passed since last update.

VC++デバッガーで、ライブラリコードにステップインすることなくデバッグする

Posted at

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();
        }
    };
}

function1.gif

ステップイン機能実装後
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 */
        }
    };
}

function2.gif

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1