1

コードをステップスルーするときは本当に面倒で、新しいオブジェクトが作成されるたびに、デバッガーはコンストラクターに直接移動するのではなくnew、new.cppのCRTオペレーターを経由します。

void *__CRTDECL operator new(size_t size) _THROW1(_STD bad_alloc)
        {       // try to allocate size bytes
        void *p;
        while ((p = malloc(size)) == 0)
                if (_callnewh(size) == 0)
                {       // report no memory
                static const std::bad_alloc nomem;
                _RAISE(nomem);
                }

        return (p);
        }

特定の関数/クラスがステップインするのを選択的に停止する方法、またはこれを回避できる他の方法はありますか?

4

2 に答える 2

1

Andy Pennell のブログ エントリ " How to Not Step Into Functions using the Visual C++ Debugger " は、ほとんどの答えを提供します。私もこれを理解しようとしていました.o.*=nostepinto.

そこから、モジュール ウィンドウで msvcr100d.dll!operator new と表示されていることに気付き、正規表現として「operator new.*」を試すようになりました。

出来た!アンディのハウツーに入れるマジックは「operator new.*=nostepinto」です。

nb私はVS 2010を使用していましたが、VS 2008でも同じことが機能するはずです

于 2013-04-04T03:19:34.497 に答える
0

Visual Studio には、ステップインする関数を選択できる機能があります。したがって、次のようなコードがある場合:

foo* p = new foo( new baz ( new flip() ) );

右クリックすると、ポップアップ メニューが表示されます。そこから「ステップイン」を選択すると、ステップインできる機能のリストが表示されます。したがって、ここではすべての新しい呼び出しを回避し、ステップインするコンストラクターを選択できます。

于 2013-04-04T04:23:21.017 に答える